2018.11.23
采用 multiprocessing 模块,其中的多进程池Pool,适用于开启多个进程时。在写入文件时,每个进程会竞争资源,会导致写入的文件为空,解决办法:将文件集中到回调函数中统一写入。
ps:多进程无法共享全局变量,可以采用multiprocessing.Value(‘a’,10) or multiprocessing.Array(‘b’,[1,2,3]),但是创建的该数组没有 append 等方法。
关于进程数量,可以查看自己的电脑的内核 数量:打开设备管理器查看处理器数目。
或者直接使用 p_size = multiprocessing.cpu_count() 得知计算机默认内核数量。
以上内核数目均为逻辑核(虚拟内核)数目。
from multiprocessing import Pool
import multiprocessing
def fun(n):
return str(n)
def mycallback(num):
with open('res.txt','a') as f:
f.write(num)
if __name__ == '__main__':
p_size = multiprocessing.cpu_count()
p = Pool(p_size)
for i in range(8):
p.apply_async(fun,args=(i,),callback=mycallback)
p.close()
p.join()
代码结果: