我目前正在使用Tornado开发一个有多个用户的API。出于性能方面的原因,整个api都是异步的。在当前代码中,我使用cursor.fetch many(of rows)从数据库中获取许多行并写入指定的文件(csv,json)。我试图使这个过程异步,但这样做有困难。fetch处理大量数据,因此如果多人使用api,它将显著降低速度,因为人们正在“等待”其他用户的fetch完成。
我试过用
IOLoop
但收效甚微
我也试过这样的东西
async def loop(self):
I = await val.cursor.fetchmany(100)
但这也有错误,因为fetchmany函数不是一个原生的tornado函数,而且它的结构也不支持这一点。
我的一些问题是…
1)是否有人能够实现一个解决方案,使这个异步获取过程成为可能
2)这是否可能,或者数据库是否限制了Tornado异步编码的功能
3)如果这是不可能的,我可以实现像“threadpoolexecutor”这样的东西来通过多线程加速进程,或者使用fetchmany的替代品吗?(我不认为这是可能的,只是想勾勒出我的一些思维过程)
任何帮助都将不胜感激。