Итак, я думал, что, наконец, опубликую; Каким образом можно управлять Process
работниками? Я попытался использовать Pool
, но я заметил, что не смог получить возвращаемое значение каждого завершенного процесса. Я попытался использовать обратный вызов, но это тоже не сработало. Должен ли я сам управлять ими с помощью active_children()
? КодУправление процессами из модуля многопроцессорности Python
Мой бассейн:
from multiprocessing import *
import time
import random
SOME_LIST = []
def myfunc():
a = random.randint(0,3)
time.sleep(a)
return a
def cb(retval):
SOME_LIST.append(retval)
print("Starting...")
p = Pool(processes=8)
p.apply_async(myfunc, callback=cb)
p.close()
p.join()
print("Stopping...")
print(SOME_LIST)
Я ожидаю, что список значений; но все это я получаю последний элемент в работе работника для завершения:
$ python multi.py
Starting...
Stopping...
[3]
Примечания: Ответ не должен использовать threading
модуль; вот причина, почему:
В CPython, из-за глобальным интерпретатор блокировку, только один поток может выполнить код Python сразу (даже если некоторые ориентированные на показатели эффективности библиотек могут преодолеть это ограничение). Если вы хотите, чтобы ваше приложение использовало вычислительные ресурсы многоядерных машин , рекомендуется использовать многопроцессорную обработку.
Использование пула - правильный путь. Вы также должны получить возвращаемое значение для каждого завершенного рабочего процесса: 'return_value = pool.apply (func, args = (arg1, arg2)'. Можете ли вы поделиться кодом, который вы пытаетесь использовать, что isn 't working? – dano
Я не уверен, что это то, что вы имеете в виду, но это тоже прекрасно работает: 'return_value = pool.apply (func)'. Где 'func' является' def func(): return 12345'. 'return_value' будет присваиваться' 12345', возвращенному 'func'. – dano
Я в замешательстве. Почему вы ожидаете список результатов из приведенного выше примера? Вы просто вызываете' apply_async' один раз, что означает, re, просто вызывающий 'myfunc' один раз в одном из рабочих процессов. Что вы ожидаете? – dano