【发布时间】:2018-10-09 22:39:00
【问题描述】:
我目前正在使用 tornado 开发一个拥有多个用户的 API。出于性能原因,整个 API 都是异步的将是有益的。在当前代码中,我利用 cursor.fetchmany(# of rows) 从数据库中获取许多行并写入指定文件(csv、json)。我正在尝试使此过程异步,但在这样做时遇到了麻烦。提取处理大量数据,因此如果多人使用 API,它将显着减慢速度,因为人们正在“等待”其他用户的提取完成。
我曾尝试使用IOLoop,但收效甚微
我也试过这样的事情
async def loop(self):
I = await val.cursor.fetchmany(100)
但是这样做存在错误,因为函数 fetchmany 不是原生的 tornado 函数,并且其结构不支持这一点。 我的一些问题是......
1)有没有人能够实现一个解决方案来使这个异步获取过程成为可能
2)这是否可能或数据库是否限制了龙卷风异步编码的功能
3) 如果这是不可能的,我可以实现类似“ThreadPoolExecutor”的东西来通过多线程加速进程,或者使用 fetchmany 的替代品吗? (我认为这是不可能的,只是想概述一下我的一些思考过程)
任何帮助将不胜感激。
【问题讨论】:
标签: python asynchronous sqlalchemy tornado