我正在尝试使用sanic中的以下代码来运行异步第三方文件上传
def up(self,request):
import asyncio
import aiohttp
header = {
'Authorization': 'Client-ID {}'.format(self.client_id)
}
data = {
'image': open("/home/jibin/Downloads/test.jpg", "rb")
}
async def upload(data):
async with aiohttp.ClientSession() as session:
async with session.post(self.url, headers=header,data=data) as resp:
data = await resp.text()
print(data)
futures = []
futures.append(upload(data))
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(futures))
loop.close()
return response.json("done",status=200)
这就是我从路线中调用请求的方式。
@app.route('/upload', methods=['POST'])
async def upload(request):
return up(request)
但是,它返回RuntimeError:此事件循环已在运行。错误
答案 0 :(得分:1)
这是在sanic中为我工作的代码
@app.route('/upload')
async def get_ressource(request):
asyncio.ensure_future(blocking_function())
return await resp()
async def blocking_function():
async with aiohttp.ClientSession() as session:
async with session.post("your_url", data={
'image': open("file_path", "rb"),
}, headers={
'Authorization': 'Client-ID {}'.format("your_client_id")
}) as resp:
result = await resp.text()
print(result)
async def resp():
return response.json("OK", status=202)