小编Hel*_*thy的帖子

在单独的线程中运行 asyncio 循环,信号来自和到循环

我正在尝试制作一个在后台与多个 BLE 设备进行通信的 UI。为此,我实现了一个运行 asyncio.loop 的单独线程。这是必要的,因为我使用 bleak 0.9.1 连接到设备。

使用信号和槽从 UI 线程获取数据到工作线程工作正常。但是,它在另一个方向上不起作用。据我所知,这是因为线程忙于运行循环并且永远不会停止这样做。因此,它无法处理来自 UI 线程的输入。

下面是显示问题的示例代码。

有没有办法在运行异步循环时处理线程中的输入槽?

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtCore import QThread, QObject, pyqtSignal, pyqtSlot
import asyncio

class Test_Thread(QObject):
    signal_back = pyqtSignal(int)

    def __init__(self,
                 loop: asyncio.AbstractEventLoop,
                 parent=None):
        super(Test_Thread, self).__init__(parent)
        self.text = "Task1 not configured"
        self.loop = loop
        self.counter = 0

    @pyqtSlot(str)
    def set_text_slot(self, txt):
        self.text = txt

    async def do_stuff1(self):
        while True:
            print(self.text)
            await asyncio.sleep(2.0)

    async def do_stuff2(self):
        while True:
            self.counter += 1 …
Run Code Online (Sandbox Code Playgroud)

python multithreading pyqt pyqt5 python-asyncio

3
推荐指数
1
解决办法
392
查看次数

标签 统计

multithreading ×1

pyqt ×1

pyqt5 ×1

python ×1

python-asyncio ×1