无法使用 aiohttp 发出异步请求
not able to make async request using aiohttp
我有以下 python api 函数,它需要一些时间来提供输出。它的 api 端点是 abc/abcd。当我从多个 ip 同时点击 api 端点时,它不会给出下一个输出,直到上一个请求未完成。我正在使用 aiohttp。我api应该同时回答很多请求
async def Logistic(request):
container_id = request.query['container_id']
company = request.query['company']
data = mysqlcon("SELECT date,moves,location,vessel,voyage,current_status FROM container_status WHERE date_current in (SELECT max(date_current) FROM container_status) and company_id={0}".format(container_id),"rpa")
a = {"Result":[]}
if data == ():
pass
else:
for i in data:
a["Result"].append(i)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})
请将所有数据库访问代码(SELECT ...
对返回结果的执行和迭代)移动到一个单独的函数中,并运行 将其放入线程池中:
def sync_db_request(container_id):
data = mysqlcon("SELECT date,moves,location,vessel,voyage,current_status FROM container_status WHERE date_current in (SELECT max(date_current) FROM container_status) and company_id={0}".format(container_id),"rpa")
a = {"Result":[]}
if data == ():
pass
else:
for i in data:
a["Result"].append(i)
return a
async def Logistic(request):
container_id = request.query['container_id']
company = request.query['company']
a = await request.loop.run_in_executor(None, sync_db_request, container_id)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})
我有以下 python api 函数,它需要一些时间来提供输出。它的 api 端点是 abc/abcd。当我从多个 ip 同时点击 api 端点时,它不会给出下一个输出,直到上一个请求未完成。我正在使用 aiohttp。我api应该同时回答很多请求
async def Logistic(request):
container_id = request.query['container_id']
company = request.query['company']
data = mysqlcon("SELECT date,moves,location,vessel,voyage,current_status FROM container_status WHERE date_current in (SELECT max(date_current) FROM container_status) and company_id={0}".format(container_id),"rpa")
a = {"Result":[]}
if data == ():
pass
else:
for i in data:
a["Result"].append(i)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})
请将所有数据库访问代码(SELECT ...
对返回结果的执行和迭代)移动到一个单独的函数中,并运行 将其放入线程池中:
def sync_db_request(container_id):
data = mysqlcon("SELECT date,moves,location,vessel,voyage,current_status FROM container_status WHERE date_current in (SELECT max(date_current) FROM container_status) and company_id={0}".format(container_id),"rpa")
a = {"Result":[]}
if data == ():
pass
else:
for i in data:
a["Result"].append(i)
return a
async def Logistic(request):
container_id = request.query['container_id']
company = request.query['company']
a = await request.loop.run_in_executor(None, sync_db_request, container_id)
return web.Response(text=json.dumps(a),headers={'ACCESS-CONTROL-ALLOW-ORIGIN':'*'})