Я относительно новичок в Python и новичок в Python многопроцессорной обработке. Я пытаюсь выполнить функцию несколько раз (10 раз в примере ниже) как отдельные процессы. Внутри функции у меня есть al oop нескольких итераций (опять же, 10 раз в примере ниже). В этом примере, для простоты, функция просто устанавливает случайное число. Судя по добавленным мной логам, у меня как минимум две проблемы. Во-первых, хотя я вижу запуск итерации 1 каждого экземпляра процесса и установку случайного числа, итерация 2 каждого экземпляра процесса запускается, но, похоже, ничего не делает сверх этого, и итерации 3-10 каждого процесса, похоже, вообще не запускаются. Во-вторых, похоже, что существует перекрестное заражение между экземплярами процессов, причем несколько процессов, по-видимому, устанавливают одно и то же случайное число.
Мой код
import concurrent.futures
import numpy as np
def do_it(n):
for i in range(1,11):
print("do_it instance" + " " + str(n) + ", iteration " + str(i) + " starting")
try:
rnd
except NameError:
print("do_it instance" + " " + str(n) + ", iteration " + str(i) + ": Variable is not defined")
else:
print("do_it instance" + " " + str(n) + ", iteration " + str(i)+ ": Variable is already defined as " + str(random))
rnd = np.random.randint(1,1000)
print("do_it instance" + " " + str(n) + ", iteration " + str(i) + ": rnd set to " + str(rnd))
return rnd
def main():
with concurrent.futures.ProcessPoolExecutor() as executor:
results = executor.map(do_it, range(1,11))
print(results)
Моя цель - в итоге получается список из 100 случайных чисел, по одному от каждого из 10 экземпляров процесса и 10 итераций в нем. Несомненно, у этого есть простое объяснение и решение, но поиск ответов в Интернете мне не помог. Есть ли Python специалисты, которые могут помочь?
Журнал
do_it instance 1, iteration 1 starting
do_it instance 1, iteration 1: Variable is not defined
do_it instance 2, iteration 1 starting
do_it instance 2, iteration 1: Variable is not defined
do_it instance 3, iteration 1 starting
do_it instance 3, iteration 1: Variable is not defined
do_it instance 1, iteration 1: rnd set to 807
do_it instance 1, iteration 2 starting
do_it instance 2, iteration 1: rnd set to 807
do_it instance 2, iteration 2 starting
do_it instance 3, iteration 1: rnd set to 807
do_it instance 3, iteration 2 starting
do_it instance 4, iteration 1 starting
do_it instance 4, iteration 1: Variable is not defined
do_it instance 4, iteration 1: rnd set to 666
do_it instance 4, iteration 2 starting
do_it instance 5, iteration 1 starting
do_it instance 5, iteration 1: Variable is not defined
do_it instance 5, iteration 1: rnd set to 666
do_it instance 5, iteration 2 starting
do_it instance 6, iteration 1 starting
do_it instance 6, iteration 1: Variable is not defined
do_it instance 6, iteration 1: rnd set to 807
do_it instance 6, iteration 2 starting
do_it instance 7, iteration 1 starting
do_it instance 8, iteration 1 startingdo_it instance 7, iteration 1: Variable is not defined
do_it instance 8, iteration 1: Variable is not defined
do_it instance 8, iteration 1: rnd set to 666
do_it instance 8, iteration 2 startingdo_it instance 7, iteration 1: rnd set to 666
do_it instance 9, iteration 1 startingdo_it instance 7, iteration 2 starting
do_it instance 9, iteration 1: Variable is not defined
do_it instance 10, iteration 1 startingdo_it instance 9, iteration 1: rnd set to 947
do_it instance 9, iteration 2 startingdo_it instance 10, iteration 1: Variable is not defined
do_it instance 10, iteration 1: rnd set to 947
do_it instance 10, iteration 2 starting