简单谈谈python中的多进程

简单谈谈python中的多进程,第1张

概述进程是由系统自己管理的。1:最基本的写法frommultiprocessingimportPooldeff(x):returnx*x

进程是由系统自己管理的。

1:最基本的写法

from multiprocessing import Pooldef f(x):  return x*xif __name__ == '__main__':  p = Pool(5)  print(p.map(f,[1,2,3]))[1,4,9]

2、实际上是通过os.fork的方法产生进程的

unix中,所有进程都是通过fork的方法产生的。

multiprocessing Processosinfo(Title):  Title,__name__  (os,):,os.getppID(),os.getpID()f(name):  info(),name__name__ == :  info()  p = Process(=f,=(,))  p.start()  p.join()

3、线程共享内存

threadingrun(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 Processrun(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,Queuef(q,n):  q.put([n,])__name__ == :  q=Queue()  i ():    p=Process(=f,=(q,i))    p.start()  :    q.get()

4、锁:仅是对于屏幕的共享,因为进程是独立的,所以对于多进程没有用

multiprocessing Process,Lockf(l,i):  l.acquire(),i  l.release()__name__ == :  lock = Lock()  num ():    Process(=f,=(lock,num)).start()hello world 0hello world 1hello world 2hello world 3hello world 4hello world 5hello world 6hello world 7hello world 8hello world 9

5、进程间内存共享:Value,Array

multiprocessing Process,Value,Arrayf(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,Managerf(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 Pooltimef(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

总结

以上是内存溢出为你收集整理的简单谈谈python中的多进程全部内容,希望文章能够帮你解决简单谈谈python中的多进程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1203546.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存