使用龙卷风,为使用sqlalchemy fetchmany()的阻止程序函数创建一个异步函数



我目前正在使用龙卷风来开发一个拥有多个用户的API。出于性能原因,整个 API 异步是有益的。在当前的代码中,我利用 cursor.fetchmany(# 行(从数据库中获取许多行并写入指定的文件 (csv,json(。我正在尝试使此过程异步,但无法做到这一点。抓取处理大量数据,因此如果多人使用该 API,当人们"等待"其他用户的抓取完成时,它会显着减慢它的速度。

我尝试使用IOLoop,但收效甚微

我也尝试了这样的事情

async def loop(self):
I = await val.cursor.fetchmany(100)

但是这存在错误,因为函数 fetchmany 不是本机龙卷风函数,并且结构不支持此功能。 我的一些问题是...

1(有没有人能够实施解决方案来使这种异步获取过程成为可能

2(这是否可能,或者数据库是否限制了龙卷风异步编码的功能

3(如果这是不可能的,我是否可以实现类似"ThreadPoolExecutor"的东西,通过多线程或使用fetchmany的替代品来加快进程?(我认为这是不可能的,只是试图概述我的一些思考过程(

任何帮助将不胜感激。

通常,我使用 @gen.coroutine 装饰器将 SQLAlchemy 函数包装在其他方法中,因此它可以是异步方法。

例如:

@gen.coroutine
def fetchmany():
return val.cursor.fetchmany(100)
@gen.coroutine
def loop(self):
I = yield fetchmany()

希望对您有所帮助

最新更新