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