Я пытаюсь запустить бесконечный цикл 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)]
Вы должны использовать Pool
from multiprocessing import Pool
pool = Pool(processes=2) # define number of processes
results = [pool.apply(loop_a) for x in range(2)]
Большое спасибо за ваш ответ. У меня все еще есть проблемы с получением вашего ответа для создания результата, который я ищу. Всякий раз, когда я изменяю свой код, чтобы спать определенный период времени и сообщать о времени ожидания, ваш код, кажется, печатает только один поток. Используя предоставленный вами синтаксис for, я добился именно того, что мне нужно. Спасибо за помощь.