#python #multithreading #python-asyncio #concurrent.futures #nats.io
Вопрос:
Краткое описание нашего приложения:
1. прослушивает сообщение NATS
2. Для каждого сообщения требуется отправить сообщение в один поток для выполнения задачи
3. Решил использовать concurrent.futures.Потокисполнитель
Вопрос 1. Является ли следующий подход правильным? Отправит ли исполнитель пула потоков одно сообщение одному потоку здесь или нескольким потокам? Нормально ли иметь один и тот же обратный вызов для 2 субъектов NATS?
async def main():
# some code here
async def callback(msg):
nonlocal natsClient
print("Received Message at ", datetime.now().time(), flush=True)
... # some code here
def some_task(payload):
dummy = 1 # some code here
# want to use thread pool executor here
with concurrent.futures.ThreadPoolExecutor(1) as executor:
executor.map(some_task, msg)
# task within thread will have logic to do different processing for different NATS subject (abc. / def.ghi)
await natsClient.subscribe("abc.>", cb=callback)
await natsClient.subscribe("def.ghi", cb=callback)
Вопрос 2: Уже используется следующий код для цикла событий. Я что-нибудь здесь упускаю?
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
loop.run_forever()
finally:
loop.close()
Примечание: Кодирование продолжается, поэтому ранний обзор поможет сделать это чисто. В любом случае, опубликуем результаты после отладки здесь.