簡體   English   中英

如何處理Python多個池中的所有錯誤?

[英]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~ exceptpool_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM