У меня проблема с многопроцессорностью в Python. Мне нужно создать асинхронные c процессы, которые запускаются неопределенное время, и количество процессов также не определено. Как только поступает новый запрос, необходимо создать новый процесс со спецификациями из запроса. Мы используем ZeroMQ для обмена сообщениями. Существует также процесс, который запускается в начале и завершается только при завершении всего сценария.
Теперь я ищу решение, как я могу ожидать все процессы, имея при этом возможность добавлять дополнительные процессы.
asyncio.gather()
Это была моя первая идея, но ему нужен список процессов до его вызова.
class Object:
def __init__(self, var):
self.var = var
async def run(self):
*do async things*
class object_controller:
def __init__(self):
self.ctx = zmq.Context()
self.socket = self.ctx.socket(zmq.PULL)
self.socket.connect("tcp://127.0.0.1:5558")
self.static_process = AStaticProcess()
self.sp = aiomultiprocess.Process(target=self.static_process.run)
self.sp.start()
#here I need a good way to await this process
def process(self, var):
object = Object(var)
process = aiomultiprocess.Process(target=object.run)
process.start()
def listener(self)
while True:
msg = self.socket.recv_pyobj()
# here I need to find a way how I can start and await this process while beeing able to
# receive additional request, which result in additional processes which need to be awaited
Это некоторый код, который, надеюсь, объясняет мою проблему. Мне нужен своего рода коллектор, который ожидает процессы.
После инициализации нет взаимодействия между объектом и контроллером, только через zeroMQ (между процессом stati c и переменными процессами). Возврата тоже нет.