1
我设置了一些简单的代码来测试多处理的一些问题处理,并且我无法跟踪此代码中的错误,因为没有来自进程的反馈。我怎么能从子流程中接收异常,因为现在我对它不知情。如何调试此代码。为什么Python中没有报告多处理的错误,以及如何打开报告错误?
# coding=utf-8
import multiprocessing
import multiprocessing.managers
import logging
def callback(result):
print multiprocessing.current_process().name, 'callback', result
def worker(io_lock, value):
# error
raise RuntimeError()
result = value + 1
with io_lock:
print multiprocessing.current_process().name, value, result
return result
def main():
manager = multiprocessing.Manager()
io_lock = manager.Lock()
pool = multiprocessing.Pool(multiprocessing.cpu_count())
for i in range(10):
print pool.apply_async(worker, args=(io_lock, i), callback = callback)
pool.close()
pool.join()
if __name__ == '__main__':
logging.basicConfig(level = logging.DEBUG)
main()
看起来简单的解决方案是最好的解决方案。我正在测试它如何与16个进程协同工作。 – Chameleon 2015-02-24 21:40:19
我已经稍微修改了我的答案,您应该在记录它之后重新提出异常。这样的过程将会崩溃并正常退出。当然你可能不需要这种行为。但我会建议。 – aychedee 2015-02-25 10:56:56
这是真的异常应该在记录后再次提出,因为没有处理 - 你是对的,这是最好的模式。 – Chameleon 2015-02-25 12:21:01