python高性能编程怎么样(Python编程从入门到实践)

一、选择操作系统高性能多任务编程需要选择合适的操作系统。因为windows下创建子进程是通过重新加载py程序文件;而linux和mac创建子进程是通过复制父进程的内存空间,所以在windows平台下运行多进程python程序的效率远不如在linux和

一、选择操作系统

高性能多任务编程需要选择合适的操作系统。因为windows下创建子进程是通过重新加载py程序文件;而linux和mac创建子进程是通过复制父进程的内存空间,所以在windows平台下运行多进程python程序的效率远不如在linux和mac平台下运行。要追求高性能多任务运行python程序的,推荐使用linux或mac操作系统。

二、分析任务类型

高性能多任务编程有三种方式:

  1. 多进程,追求高运算:

任务类型:计算多IO少时,建议使用进程池的方式来编程。进程池中进程的数量一般推荐为CPU内核数的一至两倍。多进程程序运行时是并行执行。

常见任务:科学计算、数据分析等。

注意:创建进程开销极大,进程之间数据隔离,多进程存在数据不安全的情况,可规避所有IO。

  1. 多线程,运用最多:

任务类型:IO多计算少时,建议使用线程池的方式来编程。线程池中线程的数量一般推荐为CPU内核数的四到五倍,至多不超过十倍。多线程程序运行时是并发执行(由于GIL锁造成python多线程执行时不能并行执行)。

常见任务:爬虫等。

注意:创建线程开销小,线程之间数据共享,多线程存在数据不安全的情况,可规避所有IO。

  1. 协程,追求高并发:

任务类型:IO多计算少且需要大幅度提高并发数时,建议使用协程或多进程+多线程+协程的方式。

常见任务:爬虫、网络服务、web服务器等。

注意:创建协程开销极小,线程之间数据共享,多线程不存在数据不安全的情况,但只能规避部分IO。

三、Python解释器类型

目前大家用得最多的是CPython,它是用C语言实现的Python解释器,也是官方的并且是使用最广泛的Python解释器,它的软件包和兼容性最佳,CPython最新版本是3.9.1。官网是https://www.python.org/ 。

如果要追求高性能的话目前值得推荐的解释器是PyPy,PyPy提供了JIT编译器和沙盒功能,因此运行速度比CPython要快,它的软件包和兼容性不如CPython,Pypy最新版本是3.7。官网是https://www.pypy.org/ 。

四、注意事项

高性能多任务编程使用线程池的方式最多,要注意python线程编程的一个缺陷,即不能在线程外部关闭超时的线程。所以需要在任务内部对超时情况做处理。下面写一个简单的模拟爬虫案例:

代码:

from concurrent.futures import ThreadPoolExecutor
import requests

url = [(\'csdn\', \'https://www.csdn.net/\'), (\'cnblogs\', \'https://www.cnblogs.com/\'),
(\'baidu\', \'https://www.baidu.com/\'), (\'toutiao\', \'https://www.toutiao.com/\'),
(\'google\', \'https://www.google.com/\')]

def get(site):
try:
r = requests.get(site[1], timeout=5) # 设置超时时限为5秒
except requests.exceptions.ConnectTimeout:
return site[0], \'超时\'
return site[0], \'正常\'

if __name__ == \"__main__\":
p_list = []
with ThreadPoolExecutor(max_workers=5) as e:
ret = e.map(get, url)

for i in ret:
print(f\'网站“{i[0]}”下载情况是“{i[1]}”\')

输出:

网站“csdn”下载情况是“正常”
网站“cnblogs”下载情况是“正常”
网站“baidu”下载情况是“正常”
网站“toutiao”下载情况是“正常”
网站“google”下载情况是“超时”

说明:

我们需要多任务执行的是get函数,它用来下载网页。在get中要对io操作进行超时预判,即超过5秒获取不到结果的网站放弃爬取。假设不设超时预判会导致线程一直反复爬取但一直获取不到数据而陷入死循环,极其影响整体影响效率。

总结:

因为python多线程无法从外部结束超时的线程,所以在多任务编程中要在函数内部对可能存在异常的任务做超时判断及处理。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/25243.html

(0)
nan
上一篇 2021-09-14
下一篇 2021-09-14

相关推荐

  • 「域名注册的步骤是什么」什么是域名如何注册域名

    域名注册的步骤是什么,什么是域名如何注册域名 内容导航: 域名注册流程是什么 网站域名注册的流程是什么 请问要注册域名到那里呢有什么步骤 域名注册申请流程是怎麽样的 一、域名注册流…

    2022-05-18
    0
  • 函数的应用知识点(excel最常用的八个函数)

    Excel中的数据统计分析,离不开函数公式,相对于一些“高大上”的应用技巧,函数,公式是基础,也是灵魂。一、求和。(一)单条件求和。函数:Sumif。功能:对满足条件的单元格求和。语法结构:=Sumif(条件范围,条件,[求和范围])。当“条

    2021-09-13 技术经验
    0
  • 网站如何做排名(网站怎么做排名)

    网站如何做排名,网站怎么做排名内容导航:网站关键词排名怎么做上去提升网站排名网页排名如何做网站长期没排名怎么办,如何解决没排名问题不同行业的网站营销是如何做排名一、网站关键词排名怎么做上去网站关键词排名对于整个网站来说是至关重要的,有一个好的排名这样的话,

    2022-04-24
    0
  • dede如何更换模板(dedecms怎样实现模板替换)

    dede如何更换模板,dedecms怎样实现模板替换 内容导航: 网站的源码和模板有什么区别 怎么更换dede默认的模板 怎么更换dede的网站模板 DEDEcms更换模板问题: …

    2022-05-19
    0
  • tensorflow中predict的用法是什么

    在TensorFlow中,predict函数用于对模型进行预测,即输入一组数据并获取模型的输出。通常情况下,我们需要先加载已经训练好的模型,然后使用predict函数对测试数据进行预测。具体操作如下:加载训练好的模型:model = tf.keras.models.load_model('path_to_your_model.h5')准备测试数据:X_test = # 准备测试

    2024-04-16
    0
  • MariaDB中如何优化查询语句的性能

    要优化MariaDB中的查询语句性能,可以采取以下几种方法:使用合适的索引:在查询语句中使用索引可以加快查询的速度。确保表中的字段上有适当的索引,可以使用EXPLAIN语句来查看查询执行计划和索引使用情况。避免使用SELECT:在查询语句中避免使用SELECT,而是明确指定需要查询的字段,可以减少查询的数据量,提高性能。使用合适的数据类型:选择合适的数据类型可以减少数据存储空间的占用,提高查询

    2024-03-15
    0

发表回复

登录后才能评论