Как использовать очередь в concurrent.futures.ProcessPoolExecutor ()? - PullRequest
0 голосов
/ 24 сентября 2018

Отказ от ответственности : Я новичок в Python в целом.У меня небольшой опыт работы с Go, где реализация очереди с использованием канала действительно проста.

Я хочу знать, как я могу реализовать очередь с ProcessPoolExecutor в Python 3.

Я хочу, чтобы мойЧисло процессов для доступа к одной очереди, так что я могу просто вставить много заданий в очередь через основной поток, тогда процессы просто будут захватывать задания в очереди.

Или, если есть лучший способ поделиться списком / очередью между несколькими процессами.(Возможно, очередь на работу / рабочий пул?)

Спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

concurrent.futures делает это для вас.executor объект реализует очередь внутренне, поэтому, когда вы отправляете задачи, они помещаются в очередь, и ваши рабочие потоки или рабочие процессы выбирают задания и запускают их.

Может показаться, что это тоже "просто », но в этом и заключается смысл concurrent.futures - абстрагирование от всей сложности управления пулами потоков или пулами процессов, очередями заданий и т. д., чтобы вы могли тратить немного накладных расходов на сэкономленные время и силы.

Вот как это выглядит:

import concurrent.futures

def send_email(from, to, subject, message):
    # magic to send an email

executor = concurrent.futures.ProcessPoolExecutor()
future = executor.submit(send_email, 'me@example.com', 'you@example.com', 'Hi!', 'Nice to meet you')

Этот простой вызов submit принимает вашу функцию и ее аргументы, упаковывает их в рабочий элемент, помещает их в очередь и процесспул, который был инициализирован при создании, ваш исполнитель будет отбирать задания и запускать их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...