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

首頁 > 編程 > Python > 正文

python多進程實現進程間通信實例

2020-02-16 10:51:24
字體:
來源:轉載
供稿:網友

python中的多線程其實并不是真正的多線程,如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進程。Python提供了非常好用的多進程包multiprocessing,只需要定義一個函數,Python會完成其他所有事情。借助這個包,可以輕松完成從單進程到并發執行的轉換。multiprocessing支持子進程、通信和共享數據、執行不同形式的同步,提供了Process、Queue、Pipe、Lock等組件。

multiprocessing.Queue()

以Queue為例,在父進程中創建兩個子進程,一個往Queue里寫數據,一個從Queue里讀數據:

multiprcessing.Queue.put() 為 入隊操作

multiprcessing.Queue.get() 為 出隊操作

隊列 線程 和 進程 安全

put(obj[, block[, timeout]])

將obj放入隊列。 如果可選參數 block為True(默認值),timeout為None(默認值),則必要時阻止,直到空閑插槽可用。 如果超時是正數,它將阻止最多超時秒數,如果在該時間內沒有空閑插槽可用,則會引發Queue.Full異常。 否則(塊為False),如果空閑插槽立即可用,則將一個項目放在隊列中,否則會引發Queue.Full異常(在這種情況下,忽略超時)。

get([block[, timeout]])

從隊列中刪除并返回一個項目。 如果可選的args塊為True(默認值),超時為None(默認值),則在必要時阻止,直到項目可用。 如果超時為正數,則它將阻塞至多超時秒數,并在該時間內沒有可用項目時引發Queue.Empty異常。 否則(block為False),如果一個項目立即可用,返回一個項目,否則會引發Queue.Empty異常(在這種情況下,忽略超時)。

#- * -coding: utf - 8 - * -  from multiprocessingimport Process, Queueimport osimport timeimport random# 寫數據進程執行的代碼:  def write(q):  print('Process to write: %s' % os.getpid())for value in ['A', 'B', 'C']:  print('Put %s to queue...' % value)q.put(value)time.sleep(random.random())# 讀數據進程執行的代碼:  def read(q):  print('Process to read: %s' % os.getpid())while True:  value = q.get()print('Get %s from queue.' % value)if __name__ == '__main__': #父進程創建Queue, 并傳給各個子進程:q = Queue()pw = Process(target = write, args = (q, ))pr = Process(target = read, args = (q, ))# 啟動子進程pw, 寫入:  pw.start()# 啟動子進程pr, 讀取:  pr.start()# 等待pw結束:  pw.join()# pr進程里是死循環, 無法等待其結束, 只能強行終止:  pr.terminate()

輸出

Process to read: 5836Process to write: 6472Put A to queue...Put B to queue...Get A from queue.Put C to queue...Get B from queue.Get C from queue.Process finished with exit code 0

multiprocessing.Pipe()

Pipe()函數返回一對由管道連接的連接對象,默認情況下是雙工(雙向)。

Pipe()返回的兩個連接對象代表管道的兩端。 每個連接對象都有send()和recv()方法(等等)。 請注意,如果兩個進程(或線程)嘗試同時讀取或寫入管道的同一端,管道中的數據可能會損壞。 當然,同時使用管道不同端的過程也不會有風險。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼图壁县| 深州市| 天台县| 宜春市| 临邑县| 海城市| 桑植县| 德令哈市| 马尔康县| 镇坪县| 昭苏县| 鄂托克前旗| 乌鲁木齐县| 林甸县| 蕲春县| 廉江市| 东城区| 河池市| 杨浦区| 高邑县| 花垣县| 中阳县| 武宣县| 秦安县| 柏乡县| 成武县| 美姑县| 故城县| 定结县| 峨山| 乌什县| 崇信县| 凌云县| 于田县| 太康县| 建平县| 金溪县| 蓝山县| 北海市| 汉源县| 阿瓦提县|