最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python多進程實現(xiàn)進程間通信實例

 更新時間:2017年11月24日 14:41:05   作者:HeatDeath  
這篇文章主要介紹了python多進程實現(xiàn)進程間通信實例,具有一定參考價值,需要的朋友可以了解下。

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

multiprocessing.Queue()

以Queue為例,在父進程中創(chuàng)建兩個子進程,一個往Queue里寫數(shù)據(jù),一個從Queue里讀數(shù)據(jù):

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

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

隊列 線程 和 進程 安全

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

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

get([block[, timeout]])

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

#- * -coding: utf - 8 - * -
  from multiprocessing
import Process, Queue
import os
import time
import random


# 寫數(shù)據(jù)進程執(zhí)行的代碼:
  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())

# 讀數(shù)據(jù)進程執(zhí)行的代碼:
  def read(q):
  print('Process to read: %s' % os.getpid())
while True:
  value = q.get()
print('Get %s from queue.' % value)

if __name__ == '__main__': #父進程創(chuàng)建Queue, 并傳給各個子進程:
q = Queue()
pw = Process(target = write, args = (q, ))
pr = Process(target = read, args = (q, ))# 啟動子進程pw, 寫入:
  pw.start()# 啟動子進程pr, 讀取:
  pr.start()# 等待pw結(jié)束:
  pw.join()# pr進程里是死循環(huán), 無法等待其結(jié)束, 只能強行終止:
  pr.terminate()

輸出

Process to read: 5836
Process to write: 6472
Put 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()函數(shù)返回一對由管道連接的連接對象,默認情況下是雙工(雙向)。

Pipe()返回的兩個連接對象代表管道的兩端。 每個連接對象都有send()和recv()方法(等等)。 請注意,如果兩個進程(或線程)嘗試同時讀取或?qū)懭牍艿赖耐欢?,管道中的?shù)據(jù)可能會損壞。 當然,同時使用管道不同端的過程也不會有風險。

返回表示管道末端的一對Connection(conn1,conn2)對象。

如果duplex為True(默認),則管道是雙向的。

如果duplex是False,那么管道是單向的:conn1只能用于接收消息,conn2只能用于發(fā)送消息。

#- * -coding: utf - 8 - * -
  from multiprocessing
import Process, Pipe

def f(conn):
  conn.send([42, None, 'hello'])
while True:
  print(conn.recv())

if __name__ == '__main__':
  parent_conn, child_conn = Pipe()
p = Process(target = f, args = (child_conn, ))
p.start()
print parent_conn.recv()# prints "[42, None, 'hello']"
parent_conn.send('666')
p.terminate()

輸出:

[42, None, 'hello']
666

Process finished with exit code 0

總結(jié)

以上就是本文關(guān)于python多進程實現(xiàn)進程間通信實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可繼續(xù)參閱本站:

Python編程實現(xiàn)蟻群算法詳解

python繪制鉛球的運行軌跡代碼分享

Python中turtle作圖示例

如有不足之處,歡迎留言指出。

相關(guān)文章

  • 淺談Pycharm最有必要改的幾個默認設(shè)置項

    淺談Pycharm最有必要改的幾個默認設(shè)置項

    今天小編就為大家分享一篇淺談Pycharm最有必要改的幾個默認設(shè)置項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python 帶你快速上手 Apache APISIX 插件開發(fā)

    Python 帶你快速上手 Apache APISIX 插件開發(fā)

    Apache APISIX Python Runner 來了,社區(qū)中的小伙伴們在開發(fā) Apache APISIX 插件時又多了一種新選擇,本文將用實列向大家介紹,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • Python中文檔處理神器python-docx的用法解析

    Python中文檔處理神器python-docx的用法解析

    Python中有一個python-docx的庫,它允許創(chuàng)建、修改和操作Word文檔,本文將詳細介紹python-docx庫的用法,包括如何創(chuàng)建文檔、添加文本、格式化文本等,需要的可以參考下
    2023-11-11
  • 用pandas劃分數(shù)據(jù)集實現(xiàn)訓練集和測試集

    用pandas劃分數(shù)據(jù)集實現(xiàn)訓練集和測試集

    這篇文章主要介紹了用pandas劃分數(shù)據(jù)集實現(xiàn)訓練集和測試集,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 詳解Python如何實現(xiàn)輸出顏色字體到終端界面

    詳解Python如何實現(xiàn)輸出顏色字體到終端界面

    在終端中,輸出的字體總是單一顏色的,黑底白字。但是在一些場景并不能很好的滿足輸出的需求。本文為大家介紹了Python如何實現(xiàn)輸出顏色字體到終端界面中,需要的可以參考一下
    2022-12-12
  • Python中l(wèi)ist初始化方法示例

    Python中l(wèi)ist初始化方法示例

    這篇文章主要介紹了Python中l(wèi)ist初始化方法,分析了list初始化常用的方法與相關(guān)使用注意事項,需要的朋友可以參考下
    2016-09-09
  • Python如何將CSV文件轉(zhuǎn)JSON文件

    Python如何將CSV文件轉(zhuǎn)JSON文件

    這篇文章主要給大家介紹了關(guān)于Python如何將CSV文件轉(zhuǎn)JSON文件的相關(guān)資料,可以使用Python內(nèi)置的csv和json模塊來實現(xiàn)將csv文件轉(zhuǎn)為json的操作,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • 詳解Python中的文件操作

    詳解Python中的文件操作

    今天這篇文章給大家介紹Python中的文件操作,文章內(nèi)容介紹的很詳細,有需要的可以參考借鑒。
    2016-08-08
  • PyQt5?python?數(shù)據(jù)庫?表格動態(tài)增刪改詳情

    PyQt5?python?數(shù)據(jù)庫?表格動態(tài)增刪改詳情

    這篇文章主要介紹了PyQt5?python?數(shù)據(jù)庫?表格動態(tài)增刪改詳情,首先手動連接數(shù)據(jù)庫與下一個的程序連接數(shù)據(jù)庫是獨立的2個部分,下面來看看文章的詳細介紹
    2022-01-01
  • Python3一行代碼實現(xiàn)圖片文字識別的示例

    Python3一行代碼實現(xiàn)圖片文字識別的示例

    本篇文章主要介紹了Python3一行代碼實現(xiàn)圖片文字識別的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01

最新評論

广灵县| 兖州市| 抚远县| 稷山县| 肃宁县| 班戈县| 龙南县| 吉隆县| 南郑县| 原阳县| 连山| 赤壁市| 松滋市| 闽侯县| 太康县| 安义县| 岑巩县| 辽宁省| 阿鲁科尔沁旗| 南平市| 吐鲁番市| 佳木斯市| 会同县| 民县| 元江| 民勤县| 阿瓦提县| 鄂温| 清镇市| 元阳县| 潍坊市| 子洲县| 芜湖县| 米林县| 福州市| 盐源县| 孝感市| 双牌县| 普格县| 伽师县| 邢台市|