Использование параллельных.фьючерсов.ThreadPoolExecutor в обратном вызове NATS на Python

#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()
 

Примечание: Кодирование продолжается, поэтому ранний обзор поможет сделать это чисто. В любом случае, опубликуем результаты после отладки здесь.