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:
(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...