python多进程上手

multiprocessing模块可以多进程跑计算,其中有Pool是进程池,有Pipe可以通信等。

首先初始化一个进程池
p=Pool(4) # 4个进程

同步提交

同步提交的任务,会等待任务运行完成,再执行后面的程序

p.map(func_name,vars)
这个map跟普通map的计算结果一样,只不过使用进程池p来运行
这里相当于把vars中的每个值,都送入func_name进行计算,得到的结果与vars等长

p.apply(func_name,(args))
这里提交一个任务,就只能等它运行完,才会进行下一行命令,相当于func_name(args)

异步提交

异步提交了任务,会继续运行下一行程序,任务在后台运行

p.apply_async(func_name,(args))
这里任务在后台执行,如果后面没有任何其他程序,可能程序进行到这里,会被终止,实际上函数并没有运行完
如果需要等它运行完:
p.close() # 表示p不再接受新任务了
p.join() # 表示等待p中的任务运行完

取得返回值

task=p.apply_async(func_name,(args))
result=task.get()
如果后面没有其他程序,这里有get(),也会等待task执行完成,而不是直接终止任务

多进程的底层开启方式

windows只能spawn新进程,会调用同一个py文件,因此需要把程序写在if __name__=='__main__':中,而且不能在交互式时候用,因为它没有程序文件可以spawn嘛
*nix可以用fork(默认),因此不写__main__也能用

你可能感兴趣的:(python多进程上手)