Python开发之并发编程

标签: 无 分类: 未分类 创建时间:2024-11-03 06:29:24 更新时间:2024-11-15 10:49:43

1.前言

当程序需要运行大量计算任务的时候,还是需要异步编程。

(1)多进程
通过 multiprocessing 模块实现,每个进程都有独立的解释器和GIL,适用于CPU密集型任务。

(2)多线程
通过 threading 模块实现,适合处理CPU密集型任务,可以充分利用多核处理器的计算能力。

(2)异步
通过 asyncio 模块实现,基于事件循环和协程,适用于I/O密集型任务,能够提高程序的并发性。

(3)并行计算
通过asyncio模块实现,基于事件循环和协程,适用于I/O密集型任务,能够提高程序的并发性。

参考文章:
【1】.Python 异步编程入门
【2】.深入解析Python并发编程的多线程和异步编程 1.多线程基础概念;2.threading模块基础;3.代码实战:多线程下载图片;4.线程安全与锁机制;5.多线程的适用场景;6.异常处理与多线程;7.多线程的注意事项;8.多线程的性能优化;9.面向对象的多线程设计;10.多线程与资源管理器;11.多线程的调试与性能分析;12.多线程的安全性与风险;
【3】.Python 3并发编程:多线程和异步IO详解

2.多线程

3.异步

no running event loop

在我进行异步操作的时候,结果返回了这个东西。

参考文章:
【1】.Python asyncio异步编程常见问题 错误提示为:RuntimeError:no running event loop。
【2】.Python Asyncio 之常见的三个坑

4.子进程

1
2
3
4
5
6
7
8
9
10
import subprocess

# 创建一个子进程
process = subprocess.Popen(['command', 'arg1', 'arg2'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

# 获取子进程的输出
output, error = process.communicate()

# 关闭子进程
process.terminate()
参考文章:
【1】.subprocess.Popen执行程序以及关闭进程 用上面的方法来执行python demo.py,它的实际原理是另外开启一个cmd命令来运行python demo.py的命令,即使后面用popen.terminate()也只能关闭cmd的命令,cmd命令被kill掉后,python demo.py的线程由系统来托管,杀死不了python demo.py的进程,从而导致python demo.py不能退出.
【2】.subprocess.run 和 subprocess.Popen 区别 这里有一个 os.killpg(proc.pid, signal.SIGTERM) ,但是我加入了之后,发现 module ‘os’ has no attribute ‘setsid’
【3】.使用Python打开和关闭子进程
【4】.AttributeError: module ‘os’ has no attribute ‘setsid’ 这里有一个 creationflags=subprocess.CREATE_NEW_PROCESS_GROUP,但是我使用之后,还是出现:module ‘os’ has no attribute ‘killpg’
【5】.解决EasyOCR报错:cv2.error: Unknown C++ exception from OpenCV code pip install opencv-python==4.5.1.48
【6】.cv2.error: Unknown C++ exception from OpenCV code pip install opencv-python==4.5.1.48
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。