【发布时间】:2019-01-25 17:53:12
【问题描述】:
我仍然对 asyncio 的工作原理感到非常困惑,所以我试图设置一个简单的示例但无法实现。
以下示例是一个 Web 服务器 (Quart),它接收到生成大 PDF 的请求,然后服务器在开始处理 PDF 之前返回响应,然后开始处理它并稍后将下载链接发送到电子邮件。
from quart import Quart
import asyncio
import time
app = Quart(__name__)
@app.route('/')
async def pdf():
t1 = time.time()
await generatePdf()
return 'Time to execute : {} seconds'.format(time.time() - t1)
async def generatePdf():
await asyncio.sleep(5)
#sync generatepdf
#send pdf link to email
app.run()
我该怎么做呢?在上面的示例中,我不希望在返回之前等待 5 秒。
我什至不确定 asyncio 是否是我需要的。
而且恐怕在响应返回后阻止服务器应用程序不是应该做的事情,但也不确定。
pdf 库也是同步的,但我想那是另一天的问题......
【问题讨论】:
-
尝试将
await generatePdf()更改为asyncio.create_task(generatePdf())。
标签: python python-asyncio python-3.7 quart asgi