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()
View Code

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()
View Code

 

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

posted on 2016-12-30 18:26  lexn  阅读(14)  评论(0)    收藏  举报

导航