2013-05-06 3 views
5

Я хочу создать много процессов, каждый процесс проходит 5 секунд позже, чем в предыдущем процессе, а именно, интервал времени между каждым процессом начинается 5 секунд, так что: пробег процесс 1 подождать 5 секунд процесс хода 2 подождите 5 секунд процесс запуска подождать 5 секунд .....как извлечь процесс от процесса питон пула

как:

 for i in range(10): 
      p = multiprocessing.Process(target=func) 
      p.start() 
      sleep(5) 
     #after all child process exit 
     do_something() 

, но я хочу назвать do_something() после того, как весь процесс выхода я не знаю, как сделать синхронизацию здесь

с питона бассейна libary, я могу иметь

pool = multiprocessing.Pool(processes=4) 
    for i in xrange(500): 
      pool.apply_async(func, i) 
    pool.close() 
    pool.join() 
    do_something() 

, но в этом Кстати, 4 процессов будут работать одновременно, я не могу решить, интервал времени между процессами, является возможностью создания пула процессов, а затем принести каждый процесс, что-то вроде

pool = multiprocessing.Pool(processes=4) 
for i in xrange(500): 
    process = pool.fetch_one() 
    process(func, i) 
    time.sleep(5) 
pool.close() 
pool.join() 
do_something() 

Есть ли такая библиотека или фрагменты исходного кода, которые удовлетворяют мои потребности? благодаря

+2

Возможно, вы можете добавить аргумент к своему функционалу, на котором осталось несколько секунд до обработки? И вычислить это значение как 5 * i? – mdscruggs

+2

Вы хотите называть 'func' каждые 5 секунд 500 раз? Почему задержка? Как долго длится индивидуальный вызов 'func'? Вы хотите ограничить количество одновременных (одновременных) вызовов? Что произойдет, если вы добавите 'time.sleep()' после 'apply_async()'? Что вы хотите вместо этого? – jfs

+0

индивидуальный вызов 'func' длится 25 секунд. и я хочу называть 'func' каждые 5 секунд в течение многих раз, возможно 500, возможно, 1000. – misteryes

ответ

0

Просто положить предложения вместе, вы могли бы сделать что-то вроде:

plist = [] 
for i in range(10): 
    p = multiprocessing.Process(target=func) 
    p.start() 
    plist.append(p) 
    sleep(5) 
for p in plist: 
    p.join() 
do_something() 

Вы могли бы дать тайм-аут аргумент join() для того, чтобы справиться с застрявшими процессов; в этом случае вам придется продолжать перебирать список, удаляя завершенные процессы до тех пор, пока список не станет пустым.

Смежные вопросы