【发布时间】:2018-04-04 09:45:00
【问题描述】:
我在这个问题上挣扎了很长时间。 我正在尝试使用pyppeteer 以pdf 格式导出视图。这是我的功能:
async def export_pdf(url):
browser = await launch()
page = await browser.newPage()
await page.goto(url)
pdf = await page.pdf(
{
'printBackground': True
}
)
await browser.close()
return pdf
在我看来这样称呼它:
response.content = asyncio.get_event_loop().run_until_complete(
export_pdf(self.request.get_full_path())
)
但我得到了这个错误
/export-pdf/1/2018/1/1/ 处的运行时错误 线程 'Thread-1' 中没有当前的事件循环。
经过一番研究,我认为有人解决了我的问题,我就这样称呼它(不太明白,但这是关于 django 的事情,我的函数没有在主线程中调用):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
response.content = loop.run_until_complete(
export_pdf(
asyncio.wait(
export_pdf(self.request.get_full_path())
)
)
)
loop.close()
但现在我有这个错误:
/export-pdf/1/2018/1/1/ 处的类型错误 期望一个期货列表,而不是协程
我对 python 中的异步非常陌生,问题是,当我将完全相同的代码复制并粘贴到我的 ipython shell 中时,一切正常。
任何解释/灯光将不胜感激!
提前致谢。
编辑: 经过一些研究,我设法遇到了另一个错误,即
信号只在主线程中起作用
奇怪的是错误来自/usr/lib/python3.6/signal.py,甚至不是来自我的virtualenv。
【问题讨论】:
标签: python django python-3.x python-asyncio pypputeer