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
принимает вашу функцию и ее аргументы, упаковывает их в рабочий элемент, помещает их в очередь и процесспул, который был инициализирован при создании, ваш исполнитель будет отбирать задания и запускать их.