2016-08-20 106 views
2

我想同時處理一個函數三次,其中包含一個無限循環。Python多處理無限循環

我的代碼:

import multiprocessing 

def worker(numbers): 
    while True: 
     print numbers 

if __name__ == '__main__': 
    nums = ["1","2","3"] 
    for i in nums: 
     p = multiprocessing.Process(target=worker(i)) 
     p.start() 

的問題是不斷循環只能以「1」

1 
1 
1 
1 
1 
1 
1 
+0

您是否知道'target = worker(i)'___calls___包含無限循環的函數?你的代碼永遠不會到達'p.start()'。 –

回答

2

按rawing的評論,而不是傳遞函數對象到target關鍵字參數,你直接調用它並傳遞它的返回值,因爲它是一個無限循環,所以它永遠不會返回。

試試這個:

import multiprocessing 

_MAX_ITERATIONS = 10 

def worker(numbers): 
    iteration = 0 
    while True: 
     if iteration >= _MAX_ITERATIONS: 
      break 

     print(numbers) 
     iteration += 1 

if __name__ == '__main__': 
    nums = ["1","2","3"] 
    for i in nums: 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     p.start() 

我只加了_MAX_ITERATIONS後衛不必否則殺進程的緣故。