相关疑难解决方法(0)

PyQt5和asyncio:从永不完成的收益率

我正在尝试创建一个基于PyQt5和asyncio的新应用程序(使用python 3.4,期待最终使用async/await升级到3.5).我的目标是使用asyncio,以便即使应用程序等待某些连接的硬件完成操作,GUI也能保持响应.

在查看如何合并Qt5和asyncio的事件循环时,我发现了一个邮件列表发布,建议使用quamash.但是,在运行此示例(未修改)时,

yield from fut
Run Code Online (Sandbox Code Playgroud)

nevers似乎又回来了.我看到输出'Timeout',所以定时器回调显然会触发,但Future未能唤醒等待方法.当手动关闭窗口时,它告诉我有未完成的期货:

Yielding until signal...
Timeout
Traceback (most recent call last):
  File "pyqt_asyncio_list.py", line 26, in <module>
    loop.run_until_complete(_go())
  File "/usr/local/lib/python3.5/site-packages/quamash/__init__.py", line 291, in run_until_complete
    raise RuntimeError('Event loop stopped before Future completed.')
RuntimeError: Event loop stopped before Future completed.
Run Code Online (Sandbox Code Playgroud)

我在使用python 3.5的Ubuntu和使用3.4的Windows上测试了这个,在两个平台上都有相同的行为.

无论如何,由于这不是我实际尝试实现的,我还测试了一些其他代码:

import quamash
import asyncio
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

@asyncio.coroutine
def op():
  print('op()')

@asyncio.coroutine
def slow_operation():
  print('clicked')
  yield from op()
  print('op done')
  yield from asyncio.sleep(0.1)
  print('timeout expired') …
Run Code Online (Sandbox Code Playgroud)

python pyqt5 python-asyncio

9
推荐指数
1
解决办法
3455
查看次数

标签 统计

pyqt5 ×1

python ×1

python-asyncio ×1