Python之多进程

由于python的gil,多线程不是cpu密集型最好的选择
多进程可以完全独立的进程环境中运行程序,可以充分的利用多处理器
但是进程本身的隔离带来的数据不共享也是一个问题,而且线程比进程轻量
import multiprocessing
import datetime
def calc(i):
    sum = 0
    for _ in range(1000000000):
        sum+=1
    print(i,sum)

if __name__ == '__main__':
    start = datetime.datetime.now()

    ps = []
    for i in range(5):
        p = multiprocessing.Process(target=calc,args=(i,))
        ps.append(p)
        p.start()
    for p in ps:
        p.join()

    delta = (datetime.datetime.now()-start).total_seconds()
    print(delta)
注意多进程的代码一定要在__name__='__main__'下面执行
pid 进程id
exitcode 进程退出的状态码
terminate() 终止指定的进程
进程间同步:
multiprocessing还提供了共享内存,服务器进程来共享数据,还提供了queue队列,pipe管道用于进程间通信
通讯方式不同:
1多进程就是启动多个解释器进程,进程间通信必须序列化,反序列化
2.数据的线程安全性问题
由于每个进程中没有实现多线程,gil可以说没什么用
multiprocessing.Pool是进程池类
apply(self,func,args=(),kwds={})
阻塞执行,导致主进程执行其他子进程就像一个个执行
apply_async(self,func,args=(),kwds={},callback=None,error_callback=None)
与apply方法用法一致,非阻塞执行,得到结果后执行回调
close()
关闭池,池不能在接受新的任务
terminate()
结束工作进程,不在处理未处理的任务
join()
主进程阻塞等待子进程的退出,join方法要在close或terminate之后使用

  

  

  

猜你喜欢

转载自www.cnblogs.com/harden13/p/9177790.html