Я пытаюсь выполнить многопроцессорную обработку в Python. У меня есть функция, выполняющая некоторую работу и возвращающая список. Я хочу повторить это для нескольких случаев. Наконец, я хочу получить возвращенный список каждого параллельного вызова и объединить их (иметь только один список со всеми дубликатами удален).вызов функции многопроцессорной обработки
def get_version_list(env):
list = []
#do some intensive work
return list
from multiprocessing import Pool
pool = Pool()
result1 = pool.apply_async(get_version_list, ['prod'])
result2 = pool.apply_async(get_version_list, ['uat'])
#etc, I have six environment to check.
alist = result1.get()
blist = result2.get()
Это не работает (не уверен синтаксиса вызова функции, но я попробовал другие вещи, без особого успеха), он дает мне ошибку (и повторяет это много, так как моя интенсивная работа делает около 300 request.post).
RuntimeError: Попытка запуска нового процесса до текущего процесса завершила этап начальной загрузки.
This probably means that you are on Windows and you have
forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce a Windows executable.
Какая часть сообщения об ошибке было неясно? – martineau
Думаю, я не читал это правильно ... Может, мне пора идти домой. – Amaranth
Извините, если мой комментарий звучал суровым. Важно понимать, как многопроцессорная обработка работает в Windows. Каждый процесс импортирует основной скрипт, который также обычно содержит основной процесс. Вот почему деление его на 'if __name__ == '__main __':' важно (поэтому основная часть не выполняется повторно при каждом возникновении). – martineau