Как мне вернуть задачу в очередь, если задача не удалась?

У меня есть сценарий, который выглядит примерно так:

#!/usr/bin/env python
# encoding: utf-8

import time, random, os, multiprocessing

def main():
    NPROCESSES = 5
    pool = multiprocessing.Pool(processes=NPROCESSES)

    a = [1,2,3,4,5,6,7,8,9,0]
    for _ in pool.imap_unordered(do_task, a):
        pass

def do_task(n):
    try:
        might_crash(n)
    except Hell, e:
        print e, " crashed."

def might_crash(n):
    time.sleep(3*random.random())
    if random.randrange( 3 ) == 0:
        raise Hell(n)
    print n

class Hell(Exception):
    pass  

if __name__=="__main__":    
    main()

Этот сценарий будет обычно печатают значения из 'a', но might_crash () случайным образом вызывает исключение.

Я хочу перехватить эти исключения и вернуть текущую do_task () в очередь, чтобы повторить попытку позже.

Как мне поставить текущая задача снова в очереди, если она должна завершиться неудачей?

8
задан Hobhouse 22 March 2011 в 12:22
поделиться