[英]How to handle all errors from Python multiple pools?
為了演示問題,我准備了簡單的代碼:
from multiprocessing import Pool
class MyError(Exception):
def __str__(self):
return repr("Error msg: " + self.args[0])
def pool_function(msg):
print msg
raise MyError(msg)
return 0
def some_function():
my_pool = Pool(2)
msg = ['first', 'second']
my_pool.map(pool_function, msg)
if __name__ == '__main__':
try:
some_function()
except MyError, msg:
print msg
在此特定示例中,我得到:
first
second
'Error msg: first'
但我需要:
first
second
'Error msg: first'
'Error msg: second'
問題是,在main函數的級別上,我嘗試訪問所有唯一的錯誤消息,而不是在pool_function級別上對其進行處理,但是我僅收到第一個錯誤消息。 不幸的是,我使用的實際代碼要復雜得多,因此很難用示例中演示的代碼結構來做一些事情。 我需要一些干凈直接的解決方案來獲取所有錯誤消息並在主功能級別上對其進行處理。
感謝您提供任何解決方案的建議。
你必須把try~ except
你pool_function
不__main__
。 如果否,則__main__
將在第一個運行之后停止運行,除非第二個運行。 這是您正在嘗試的:
def pool_function(msg):
print msg
try:
raise MyError(msg)
except:
return MyError(msg)
def some_function():
my_pool = Pool(2)
msg = ['first', 'second']
return my_pool.map(pool_function, msg)
if __name__ == '__main__':
try:
msg= some_function()
except MyError, msg:
print msg
它有效,但似乎不是一個好方法,因此:
def pool_function(msg):
print msg
try:
# do something
raise MyError(msg)
except:
return 0,MyError(msg)
else:
return 1,# some result
def some_function():
my_pool = Pool(2)
msg = ['first', 'second']
return return my_pool.map(pool_function, msg)
if __name__ == '__main__':
msg = some_function()
for result in msg:
if result[0]:
# do something when it run successfully
elif not result[0]:
print result[1]
# do something when it got errors
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.