日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程浅析

發布時間:2025/5/22 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 from multiprocessing import Pipe,Process 2 3 def fun(conn): 4 conn.send([12,{'hello':'c'},'python']) 5 data=conn.recv() 6 conn.close() 7 print(id(conn),data) 8 9 10 if __name__=='__main__': 11 12 parent_conn,child_conn=Pipe() #獲取一個管道對象 13 p=Process(target=fun,args=(child_conn,)) #創建一個進程對象 導包也得是大寫 14 p.start() 15 16 print(parent_conn.recv(),id(parent_conn)) 17 parent_conn.send('兒子你好') 18 p.join()

?>>>>>>>>>>>>>>>>>>>>>>>>>>>>管道對象處理進程數據的收發

1 import multiprocessing 2 def show(num,l): 3 # with l: #如果用with則默認寫鎖名就上鎖 4 l.acquire() #啟動鎖 5 print('hello python process %s'%num) 6 l.release() #釋放鎖 7 8 if __name__=='__main__': 9 lock=multiprocessing.Lock() #創建一個進程同步鎖 10 for i in range(10): 11 p=multiprocessing.Process(target=show,args=(i,lock)).start() #生成并啟動十個進程對象

>>>>>>>>>>>>>>>>>同步鎖實現進程的同步? 為了避免同一時刻爭搶資源造成數據紊亂

>>>>>>>>>>>>>>>>>進程數據的共享使用manager來實現

1 import os 2 import multiprocessing 3 import time 4 def show(num): 5 time.sleep(1) 6 print(num,os.getpid()) 7 return 'hello python{0}'.format(num) 8 9 def ret(arg): #必須有一個參數 10 print(arg,os.getpid()) #回掉函數此時顯示的arg 就是之前被執行函數的返回值 return 'hello python{0}'.format(num) 11 12 13 if __name__=='__main__': 14 pool=multiprocessing.Pool(5) #創建的線程池數量 15 for i in range(100): 16 pool.apply_async(func=show,args=(i,),callback=ret) #進程異步使用 回調函數使用的是主進程 17 18 pool.close() #關閉進程 19 pool.join() #進程池執行完再執行主進程 20 21 print('process the end')

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>回調函數是依附于主線程執行的 主要用于寫日志

隨意切換進程運行可以使用greenlet模塊下的g.switch方法 也是作為啟動的

1 import greenlet 2 def t1(): 3 print(125) 4 gr1.switch() 5 print('abc') 6 7 def t2(): 8 print('hahaha') 9 gr2.switch() 10 print('python') 11 gr2.switch() 12 13 gr1=greenlet.greenlet(t2) #調t2 14 gr2=greenlet.greenlet(t1) #調t1 15 16 gr1.switch() #啟動

?

>>>>>>>>>>>>>>>>>>>通過協程的方法來實現進程效率的提升

1 import requests,time 2 import gevent 3 start=time.time() 4 def f(url): 5 print('GET: %s' % url) 6 resp = requests.get(url) 7 data = resp.text 8 print(len(data)) 9 10 11 gevent.joinall([ 12 gevent.spawn(f, 'https://www.python.org/'), 13 gevent.spawn(f, 'https://www.yahoo.com/'), 14 gevent.spawn(f, 'https://github.com/'), 15 ]) 16 17 print(time.time()-start)

?

轉載于:https://www.cnblogs.com/wen-kang/p/9427602.html

總結

以上是生活随笔為你收集整理的进程浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。