我有一个用C编写的程序(比如,#34; prog")可以进行许多数值运算。我想写一个"驱动程序"在python中运行" prog"以并行方式使用不同的配置,读取其输出并记录它们。有几个问题需要考虑:
prog
实例完成后尽快完成日志记录。prog
可以同时完成,因此应该集中进行日志记录driver
必须正确处理这种情况KeyboardInterrupt
时,所有工人和记录器必须正确终止而不会产生大量回溯前两点让我认为所有工作人员都必须通过例如logger
将结果发送给某个集中的multiprocessing.Queue
工作人员。但似乎第三点使得这个解决方案变得糟糕,因为如果一个工作者被杀死,队列将会被破坏。所以队列不合适。相反,我可以使用多个进程来处理管道(即每个工作人员通过管道与记录器连接)。但随后出现了其他问题:
P.S。点#4似乎是可以解决的 - 必须
禁用所有工人和记录器中的默认SIGINT处理;
将try except
块添加到主进程,以便在处理SIGINT异常时进行pool.terminate();pool.join()
调用。
如果可能的话,请你建议一个更好的设计方法,如果不是如何解决上述问题?
P.S。 python 2.7
答案 0 :(得分:1)
您可以从这里给出的答案开始:https://stackoverflow.com/a/23369802/4323
我们的想法是不使用阻止的subprocess.call()
,而是使用非阻塞的subprocess.Popen
。将每个实例的stdout
设置为例如您为每个StringIO
孩子创建的prog
对象。产生所有prog
,等待它们,写出它们的输出。应该与上面显示的代码相差不远。