简单谈谈python中的多进程
发布时间:2020-05-24 04:52:29 所属栏目:Python 来源:互联网
导读:进程是由系统自己管理的。1:最基本的写法frommultiprocessingimportPooldeff(x):returnx*x
|
进程是由系统自己管理的。 1:最基本的写法 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': p = Pool(5) print(p.map(f,[1,2,3])) [1,4,9] 2、实际上是通过os.fork的方法产生进程的 unix中,所有进程都是通过fork的方法产生的。 multiprocessing Process os info(title): title,__name__ (os,):,os.getppid(),os.getpid() f(name): info(),name __name__ == : info() p = Process(=f,=(,)) p.start() p.join() 3、线程共享内存
threading
run(info_list,n):
info_list.append(n)
info_list
__name__ == :
info=[]
i ():
p=threading.Thread(=run,=[info,i])
p.start()
[0]
[0,1]
[0,1,2]
[0,3]
[0,3,4]
[0,5]
[0,5,6]
[0,6,7]
[0,7,8]
[0,8,9]
进程不共享内存:
multiprocessing Process
run(info_list,n):
info_list.append(n)
info_list
__name__ == :
info=[]
i ():
p=Process(=run,i])
p.start()
[1]
[2]
[3]
[0]
[4]
[5]
[6]
[7]
[8]
[9]
若想共享内存,需使用multiprocessing模块中的Queue
multiprocessing Process,Queue
f(q,n):
q.put([n,])
__name__ == :
q=Queue()
i ():
p=Process(=f,=(q,i))
p.start()
:
q.get()
4、锁:仅是对于屏幕的共享,因为进程是独立的,所以对于多进程没有用
multiprocessing Process,Lock
f(l,i):
l.acquire(),i
l.release()
__name__ == :
lock = Lock()
num ():
Process(=f,=(lock,num)).start()
hello world 0
hello world 1
hello world 2
hello world 3
hello world 4
hello world 5
hello world 6
hello world 7
hello world 8
hello world 9
5、进程间内存共享:Value,Array
multiprocessing Process,Value,Array
f(n,a):
n.value = i ((a)):
a[i] = -a[i]
__name__ == :
num = Value(,)
arr = Array(,())
num.value
arr[:]
p = Process(=f,=(num,arr))
p.start()
p.join()
0.0
[0,9]
3.1415927
[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
#manager共享方法,但速度慢
multiprocessing Process,Manager
f(d,l):
d[] = d[] = d[] = l.reverse()
__name__ == :
manager = Manager()
d = manager.dict()
l = manager.list(())
p = Process(=f,=(d,l))
p.start()
p.join()
d
l
# print '-------------'这里只是另一种写法
# print pool.map(f,range(10))
{0.25: None,1: '1','2': 2}
[9,0]
#异步:这种写法用的不多
multiprocessing Pool
time
f(x):
x*x
time.sleep()
x*x
__name__ == :
pool=Pool(=)
res_list=[]
i ():
res=pool.apply_async(f,[i]) res_list.append(res)
r res_list:
r.get(timeout=10) #超时时间
同步的就是apply (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
