上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出~
如果遇到听不懂的可以看上一次的文章:
Python3 与 C# 并发编程之~ 上篇
(Net)
1.进程篇
官方文档:https://docs.python.org/3/library/multiprocessing.html
1.1.进程(Process)
Python的进程创建非常方便,看个案例:(这种方法通用,fork只适用于Linux系)
运行结果:
创建子进程时,传入一个执行函数和参数,用start()方法来启动进程即可
方法是父进程回收子进程的封装(主要是回收僵尸子进程(点我))
其他参数可以参考源码 or 文档,贴一下源码的 方法:
扩展:
判断进程实例p是否还在执行
终止进程(发 信号)
上面的案例如果用OOP来实现就是这样:(如果不指定方法,默认调Run方法)
1.1.源码拓展
现在说说里面的一些门道(只像用的可以忽略)
新版本的封装可能多层,这时候可以看看Python3.3.X系列(这个算是Python3早期版本了,很多代码都暴露出来,比较明了直观)
multiprocessing.popen_fork.py
关于断言的简单说明:(别泛滥)
如果条件为真,它什么都不做,反之它触发一个带可选错误信息的AssertionError
结果:
运行的时候可以指定 来忽略所以 ,eg:
扩展:
https://docs.python.org/3/library/unittest.html
https://www.cnblogs.com/shangren/p/8038935.html
1.2.进程池
多个进程就不需要自己手动去管理了,有Pool来帮你完成,先看个案例:
图示:(join可以指定超时时间,eg: )
调用 之前必须先调用 ,调用 之后就不能继续添加新的 了
1.3.源码拓展
验证一下Pool的默认大小是CPU的核数,看源码:
源码里面 方法,是有回调函数(callback)的
来看个例子:(和JQ很像)
输出:
常用的就普及完了,这些比较简单,过几天有下篇继续深入
领取专属 10元无门槛券
私享最新 技术干货