1
我碰到一個問題就來了多處理:如何終止正在運行的子進程,而另一個子完成時(多)
class PythonHelper(object):
@staticmethod
def run_in_parallel(*functions):
processes=list()
for function in functions:
process=Process(target=function)
process.start()
processes.append(process)
for process in processes:
process.join()
以上stathic方法由我來同時運行多個功能(在一個將它們組合處理)。一切都很好,直到我遇到需要強制進程終止而'子進程'終止時。
例如:
from PythonHelper import PythonHelper as ph
from Recorder import Recorder
class Logger(object):
def run_recorder_proc(self):
rec=Recorder()
rec.record_video()
def run_printer_proc(self):
#hypothetical function: execution takes a long time
for i in range(9000000):
print("number: {}".format(i))
def run_logger(self):
ph.run_in_parallel(self.run_printer_proc,self.run_recorder_proc)
self.run_printer_proc和self.run_recorder_proc是我的子進程。如何在其中一個完成時「殺死」剩餘的子進程?
編輯: 完整的源代碼:
class PythonHelper(object):
@staticmethod
#with your fix
def run_in_parallel(*functions):
processes={}
for function in functions:
process=Process(target=function)
process.start()
processes[process.pid]=process
# wait for any process to complete
pid, status = os.waitpid(-1, 0)
# one process terminated
# join it
processes[pid].join()
del processes[pid]
# terminate the rest
for process in processes.values():
process.terminate()
for process in processes.values():
process.join()
class Logger(object):
def run_numbers_1(self):
for i in range(900000):
print("number: {}".format(i))
def run_numbers_2(self):
for i in range(100000):
print("number: {}".format(i))
def run_logger(self):
ph.run_in_parallel(self.run_numbers_1,self.run_numbers_2)
if __name__=="__main__":
logger=Logger()
logger.run_logger()
基於上面的例子,我想強制run_numbers_1而run_numbers_2完成端接。
不幸的是,這種解決方案並不想工作。什麼是pid的初始值?什麼是狀態?它沒有被使用 –
經過小小的更正:[Errno 10]沒有子進程 –
它是'process.pid'。 –