国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

簡單談談python中的多進程

2020-02-23 01:42:09
字體:
來源:轉載
供稿:網友

進程是由系統自己管理的。

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, 1, 2, 3][0, 1, 2, 3, 4][0, 1, 2, 3, 4, 5][0, 1, 2, 3, 4, 5, 6][0, 1, 2, 3, 4, 5, 6, 7][0, 1, 2, 3, 4, 5, 6, 7, 8][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

進程不共享內存:

multiprocessing Processrun(info_list,n):  info_list.append(n)  info_list__name__ == :  info=[]  i ():    p=Process(=run,=[info,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, 1, 2, 3, 4, 5, 6, 7, 8, 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, 8, 7, 6, 5, 4, 3, 2, 1, 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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 班玛县| 乌兰浩特市| 略阳县| 朔州市| 自治县| 二手房| 岗巴县| 如东县| 响水县| 宣恩县| 云林县| 肥乡县| 满洲里市| 高邮市| 边坝县| 霍城县| 洱源县| 汝州市| 营口市| 六盘水市| 邵阳县| 屏东县| 额敏县| 元朗区| 宁国市| 佛教| 东辽县| 资溪县| 海丰县| 鱼台县| 阿克苏市| 二手房| 双牌县| 洪洞县| 峡江县| 安义县| 台北市| 娄烦县| 余姚市| 湖州市| 海丰县|