Python3与C#并发编程之 进程篇上

上次说了很多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很像)

输出:

常用的就普及完了,这些比较简单,过几天有下篇继续深入

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G0APCB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券