因此,我使用 Sqlalchemy 配置了 Flask Restful,它从数据库返回数据,并且我想异步处理返回数据的函数调用。
示例
def doSomething(id):
doing tasks and updating to db
Class XYZ(Resource):
def get():
getId = dbgetIds()
for ids in getId:
doSomething(ids)
我想让 for 循环异步调用该函数,因为每次调用都需要花费大量时间,并且当它到达列表末尾时,它准备再次更新。有人可以帮忙吗?
您可以使用Python的asyncio库和asyncpg来进行异步数据库操作。这种方法允许您同时运行多个任务,从而提高应用程序的性能。
import asyncio
import asyncpg
import time
async def doSomething(id):
await asyncio.sleep(2)
conn = await asyncpg.connect(user='postgres', password='kartyk', database='test_db', host='localhost')
await conn.execute('UPDATE user_data SET password = \'changed\' WHERE user_id = $1', id)
await conn.close()
class XYZ:
async def get(self):
conn = await asyncpg.connect(user='postgres', password='kartyk', database='test_db', host='localhost')
users = await conn.fetch('SELECT * FROM user_data')
await conn.close()
tasks = [doSomething(user['user_id']) for user in users]
await asyncio.gather(*tasks)
return {'status': 'success'}
async def main():
start = time.perf_counter()
xyz = XYZ()
result = await xyz.get()
print(result)
end = time.perf_counter()
print(f"Time taken: {end - start} seconds")
if __name__ == "__main__":
asyncio.run(main())