В настоящее время я использую торнадо для разработки API, который будет иметь несколько пользователей.По соображениям производительности было бы полезно, чтобы весь API был асинхронным.В текущем коде я использую cursor.fetchmany (количество строк) для извлечения многих строк из базы данных и записи в указанный файл (csv, json).Я пытаюсь сделать этот процесс асинхронным, но у меня возникают проблемы с этим.Выборка имеет дело с большим объемом данных, поэтому, если несколько человек используют API, это значительно замедлит его, поскольку люди «ждут» завершения выборки других пользователей.
Я пытался использовать IOLoop с небольшим успехом
Также я пытался что-то вроде этого
async def loop(self):
I = await val.cursor.fetchmany(100)
Но есть ошибки с этим, потому что функцияfetchmany не является встроенной функцией торнадо и не имеет структуры, поддерживающей это.Вот некоторые из моих вопросов ...
1) Кто-нибудь смог реализовать решение, позволяющее сделать этот процесс асинхронной выборки
2) Возможно ли это или база данных ограничивает функциональность?асинхронного кодирования торнадо
3) Если это невозможно, могу ли я реализовать что-то вроде «ThreadPoolExecutor» для ускорения процесса путем многопоточности или использования замены fetchmany?(Я не думаю, что это возможно, но просто пытаюсь обрисовать некоторые мои мыслительные процессы)
Любая помощь будет принята с благодарностью.