Пишу бекенд на tornado, есть блокирующая функция
class Recognition:
_thread_pool = ThreadPoolExecutor(max_workers=cpu_count())
...
@run_on_executor(executor="_thread_pool")
def blocking_func(self, n):
# code
return result
Эту блокирующую функцию надо вызвать для всех элементов массива, делаю так:
@gen.coroutine
def get_res(self):
a = [1, 2, 4, 7, 9...] # 13 элементов
result = yield map(self.blocking_func, a)
raise gen.Return(activations)
Ну и соответственно вызываю:
r = yield self.get_res()
Выполнение блокирующей функции для одного элемента занимает 0.35 секунд. Но выполнение get_res занимает 4-5 секунд. Пробовал
gen.multi(), не помогает.
Возможно, нужен какой-то асинхронный map?