Многопроцессорная обработка Python создает фоновые потоки, которые ожидают ввода функций - PullRequest
0 голосов
/ 15 октября 2018

Я новичок в потоке Python .... Я хочу создать программу с несколькими потоками, ожидающими в фоновом режиме, и в какой-то момент выполнить функцию f (x) асинхронно.f (x) действительно требует много времени для вычисления (он вычисляет градиенты) ..

Я планирую запустить программу за несколько шагов (то есть за 100 шагов), и каждый шаг имеет несколько значений для x (т.е. 10 значений), но я хочу вычислить f (x) для всех 10 значений параллельно, чтобы сэкономить время ..

Я посмотрел на многопроцессорный модуль Python, но мне нужна помощь о том, как реализовать потокии процессы ..

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Если вы хотите запустить скрипт, который запускает параллельные задачи и управляет пулом процессов, вам нужно будет использовать multiprocessing.Pool .

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

0 голосов
/ 15 октября 2018

Это так же просто, как импорт python:

from multiprocessing import Pool

pool = Pool(5)
pool.map(f, [<list of inputs>])

Теперь, если ваши асинхронные функции должны будут сохранить свои результаты вычислений в том же месте, это будет немного сложнее:

from multiprocessing import Pool, Manager

l = Manager.list()

def func(l, *args, **kwargs): # you need to use the manager list as it's multiprocess safe
    blah blah

pool = Pool(5)
pool.map(func, [<list of inputs>]) 

# result will now be stored in l.

И вот, пожалуйста.

...