1. 程式人生 > >Python多程序應用的subprocess模組、multiprocessing模組

Python多程序應用的subprocess模組、multiprocessing模組

我很懶的

refer:

1. http://www.cnblogs.com/sunailong/p/5162748.html   (subprocess模組)

2. http://blog.csdn.net/u013713010/article/details/53325438  (multiprocessing模組)

3. https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000

一、multiprocessing.Queue和multiprocessing.Manager

在使用多程序通訊的時候,先嚐試了multiprocessing.Queue發現佇列能存放的資料量較少,有一個預設值具體多少暫不清楚。Queue.put(xxx)不會因為你的資料太大而報錯,只會在該語句所在程序結束時,multiprocessing.Process.join()會一直阻塞。父程序無法繼續執行。

換用multiprocessing.Manager類建立的列表或者字典:

mgr=multiprocessing.Manager()

buffConmunicate=mgr.list()  # mgr.dict()

這時,buffConmunicate裡面存放大資料量沒出錯了(我放的np.array(shape=(102400,128,8))ok了)

二、程序鎖multiprocessing.Lock

多程序可能操作同一個檔案時,加上程序鎖:lock=multiprocessing.Lock(),在需要協調的地方,加上

lock.acquire()
try:
	xxxx
finally:
	lock.release()

或者簡單的:

with lock:
	xxx