2017-05-23 53 views
0

我需要並行運行100個查詢,但我沒有足夠的資源,所以我創建了一個包含20個子列表的列表,每個子列表包含5個進程。python多處理作業列表

現在我想連續運行工作列表。 我更多地解釋:當第一個五年查詢完成後,在十二五將陸續推出,等等

我這樣做:

jobs_list = [] 
for sublist in list_all: 
    jobs = [] 
    for cd in sublist: 
     process = multiprocessing.Process(target=calc_zio, args=(cd,)) 
     jobs.append(process) 
    jobs_list.append(jobs) 

for l in jobs_list: 
    for j in l: 
     j.start() 

for l in jobs_list: 
    for j in l: 
     j.join() 

但我在CPU

的100%運行

我哪裏錯了?

謝謝!

+0

如果我數了,你正在運行** 100 **'process'。閱讀關於:https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool – stovfl

回答

0

您需要在開始下一步之前加入子列表。

jobs_list = [] 
for sublist in list_all: 
    jobs = [] 
    for cd in sublist: 
     process = multiprocessing.Process(target=calc_zio, args=(cd,)) 
     jobs.append(process) 
    jobs_list.append(jobs) 

for l in jobs_list: 
    for j in l: 
     j.start() 
    for j in l: 
     j.join()
+0

謝謝,現在我明白了 它似乎工作。我運行了40%到65%的CPU,我只有5個python.exe在註釋中提到了 –

+0

@AdamAdam作爲stovfl,這可能是一個很好的地方,可以使用'multiprocessing.pool'這種方式來保存一直在運行的給定數量的進程。有了這個實現,如果其中一個需要比其他的更長的時間,那麼該批處理的大部分時間將用於運行單個進程。因此,池會讓您有能力限制所消耗的資源,並保持負載的一致性。 – Aaron

+0

這是我現在要做的,但我找不到一個有用的示例multiprocessing.pool –