Общая переменная в concurrent.futures.ProcessPoolExecutor () python - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу использовать параллель для обновления глобальной переменной с помощью модуля concurrent.futures в python

Оказалось, что с помощью ThreadPoolExecutor можно обновить мою глобальную переменную, но ЦП не использовал весь свой потенциал (всегда при 5-10%), что очень медленно

, и ProcessPoolExecutor может использовать все ядра (на 100%), но моя глобальная переменная не может быть обновлена, поскольку они не разделяют одну и ту же глобальную переменную

Как я могу поделиться своей глобальной переменной, используя ProcessPoolExecutor в модели concurrent.futures. Большое спасибо за вашу помощь

1 Ответ

0 голосов
/ 19 апреля 2020

Изменение одной переменной из разных потоков в одно и то же время - условие гонки , и его следует избегать.

Вам необходимо переписать вашу программу таким образом, чтобы каждый поток работал со своей собственной часть данных и выполнять ресурсоемкие задачи. И только в заключительной части этого задания обновляется одна глобальная переменная / состояние в результате этого вычисления. Ему нравится MapReduce .

...