工作方式
apply():阻塞主进程, 并且一个一个按顺序地执行子进程, 等到全部子进程都执行完毕后 ,继续执行apply()后面主进程的代码
apply_async():非阻塞异步的, 他不会等待子进程执行完毕, 主进程会继续执行, 他会根据系统调度来进行进程切换
join()的作用: 在进程中可以阻塞主进程的执行, 直到等待子线程全部完成之后, 才继续运行主线程后面的代码
freeze_support()介绍
Python多进程multiprocessing在windows的Dos或者idle下运行不了会报错。打包成exe包双击之后会一直打开exe,导致内存溢出。在linux下没有问题。在Pycharm下运行也不会有问题,只要在main入口下添加 multiprocessing.freeze_support()就可以解决这个bug。
if __name__ == '__main__':
# 防止打包exe导致内存溢出
multiprocessing.freeze_support()
代码实现
实现同时启动4个子进程,然后如果有一个子进程运行结束后再启动一个新的子进程。使进程池的数量一直是保持4个进程运行
import time
import multiprocessing
def fun_c(id):
print('进程(%d)开始' % (id))
time.sleep(1)
print('进程(%d)结束' % (id))
if __name__ == '__main__':
print('主进程开始')
# 防止打包exe导致内存溢出
multiprocessing.freeze_support()
# 创建4个子进程
p = multiprocessing.Pool(4)
count = 0
while True:
p.apply_async(fun_c, args=(count,))
count += 1
p.close()
p.join()
print('主进程结束')

本文地址:https://www.mainblog.cn/282.html
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处!
免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。
黔ICP备19006353号-2
贵公网安备 52052102000042号