結合我不知道如果我所試圖做的是一個有效的做法,但這裏有雲: 我需要我的程序進行高度並行化,所以我想我可以做2-3進程,每個進程可以有2-3個線程。Python的多處理多線程
1)這可能嗎? 2)有什麼意思? 3)這是我的代碼,但當我嘗試加入過程時,它會掛起。
PQ = multiprocessing.Queue()
[...]
def node(self, files, PQ):
l1, l2 = self.splitList(files)
p1 = multiprocessing.Process(target=self.filePro, args=(l1,PQ,))
p2 = multiprocessing.Process(target=self.filePro, args=(l2,PQ,))
p1.daemon = True
p2.daemon = True
p1.start()
p2.start()
p1.join() # HANGS HERE
p2.join()
while 1:
if PQ.empty():
break
else:
print(PQ.get())
PQ.join()
def filePro(self,lst,PQ):
TQ = queue.Queue()
l1, l2 = self.splitList(lst)
t1 = threading.Thread(target=self.fileThr, args=('a',l1,TQ,))
t2 = threading.Thread(target=self.fileThr, args=('b',l2,TQ,))
t1.daemon = True
t2.daemon = True
t1.start()
t2.start()
t1.join()
t2.join()
while 1:
if TQ.empty():
break
else:
PQ.put(TQ.get())
TQ.task_done()
TQ.join()
def fileThr(self,id,lst,TQ):
while lst:
tmp_path = lst.pop()
if (not tmp_path[1]):
continue
for item in tmp_path[1]:
TQ.put(1)
TQ.join()
當我需要最大限度地利用cpu時,我使用了進程,當我阻塞磁盤訪問,網絡等操作時使用線程。因此,如果我有腳本來下載許多文件,我會創建一個線程池並使用它。如果我有一個分佈式計算可以達到峯值cpu,那麼我會使用一個進程池。 – 2014-12-13 03:52:27
如果您希望我們調試您的代碼,我們需要[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)。 – abarnert 2014-12-13 04:21:19