python多进程
python多进程
1、必须主函数中才能创建进程
#! /usr/bin/env python import multiprocessing import time,os from weapon.ap import FuncTimer def f1(al): f = os.system("mkdir c:\logl123") f = os.popen("ipconfig >c:\l1236789.txt") '''p = multiprocessing.Process(target = f1,args=(11,)) p.start() print "main end"''' if __name__ == "__main__": p = multiprocessing.Process(target = f1,args=(11,)) p.start()
2、p2.daemon = True
设置是否为后台进程
3、进程同时修改同名数据,是否会有脏数据等情况
一定不会除非是环境变量。等创建进程的时候就已经将数据复制一份到进程的分配数据地址。
4、进程同时操作一个内容
#! /usr/bin/env python import multiprocessing import time,os from weapon.ap import FuncTimer f = open(r"c:\stt.txt","a+") f.write("kai") f.close() def f1(al): print "f1 ",al ft = open(r"c:\stt.txt","a+") ft.write(str(al)) ft.close() if __name__ == "__main__": '''f = open(r"c:\stt.txt","a+") f.write("kai") f.close()''' for i in range(10): p1 = multiprocessing.Process(target = f1,args=(i,)) p1.start()
from multiprocessing import Array from multiprocessing import Manager 进程可以共同操作同一数据。文件也可以。
windows array可能不能起作用 ,放到if中。
5、相同数据操作时,必须join
原理:因为创建的子进程都是在复制或操作主进程中的数据,所以要与主进程保持通讯,如果子进程没有执行完,主进程线执行完,连接断开,再修改数据就会产生错误。
加入join,主进程就会等所有子进程执行完后才执行完毕。
6、apply和apply_async区别
apply 一个一个执行 其中一定有join
apply_async 有deamo = True
先将进程池 close或terminal,然后进程池.join
浙公网安备 33010602011771号