python多程序實現程序間通訊

2022-08-09 18:24:13 字數 2857 閱讀 9528

python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核cpu的資源,在python中大部分情況需要使用多程序。python提供了非常好用的多程序包multiprocessing,只需要定義乙個函式,python會完成其他所有事情。借助這個包,可以輕鬆完成從單程序到併發執行的轉換。multiprocessing支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。

以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

multiprocessing

import

process, queue

import

osimport

time

import

random

#寫資料程序執行的**:

defwrite(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())

#讀資料程序執行的**:

defread(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

#

- * -coding: utf - 8 - * -

from

multiprocessing

import

process, pipe

deff(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']

666process finished with exit code 0

Python多程序 程序間通訊

1.使用multiprocessing模組建立的程序之間的通訊 coding utf 8 queue類常用屬性和方法 init self,maxsize 1 qsize full empty put obj,block true,timeout none put nowait obj get blo...

Python 多程序程序池Queue程序通訊

from multiprocessing import pool,manager import time defhanshu queue,a n 1 while n 50 print r正在工作 d a,end n 1 步驟3 往佇列中傳送一條訊息 queue.put a time.sleep 2 ...

python多程序 python多程序

當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...