Многопроцессорный пул Python с бесконечным циклом while

Я пытаюсь запустить бесконечный цикл while, который вызовет функцию, которая выполняет вызов API. Каждый вызов API может занимать от 9 до 12 секунд, и я хочу, чтобы процессы x работали постоянно.

Я пробовал некоторые из существующих примеров пула, но они, похоже, принимают функцию вместе со списком аргументов. Моя функция генерирует все необходимые входные данные.

from multiprocessing import Process
from random import randint
from time import sleep

def loop_a():
    while 1:
        wait = randint(5,9)
        print("now waiting" + str(wait) + " seconds")
        sleep(wait)

if __name__ == '__main__':
    #Initialize two separate while loops that can call/wait for responses independently  
    Process(target=loop_a).start()
    Process(target=loop_a).start()

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

Этот фрагмент, кажется, решает проблему, с которой я столкнулся.

if __name__ == '__main__':
    [Process(target=loop_a).start() for x in range(2)]
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
928
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны использовать Pool

from multiprocessing import Pool
pool = Pool(processes=2) # define number of processes
results = [pool.apply(loop_a) for x in range(2)]

Большое спасибо за ваш ответ. У меня все еще есть проблемы с получением вашего ответа для создания результата, который я ищу. Всякий раз, когда я изменяю свой код, чтобы спать определенный период времени и сообщать о времени ожидания, ваш код, кажется, печатает только один поток. Используя предоставленный вами синтаксис for, я добился именно того, что мне нужно. Спасибо за помощь.

Chase Clark 29.05.2019 21:38

Другие вопросы по теме