gpt4 book ai didi

传递给唯一线程的 Python 消息

转载 作者:行者123 更新时间:2023-11-28 21:57:07 24 4
gpt4 key购买 nike

我有一个应用程序(实际上是另一个应用程序的插件)管理线程与外部传感器设备通信。外部传感器向应用程序发送事件,但应用程序也可以向传感器发送 Action 。有多种类型的设备,每一种都有需要特殊编码的独特特性(温度、压力等)。与传感器设备的所有通信都通过 IP 进行。

在应用程序中,我为传感器的每个实例创建了一个线程。这是代码示例

self.phThreadDict[phDevId] = tempsensor(self, phDevId, phIpAddr, phIpPort, phSerial, self.triggerDict)
self.phThreadDict[phDevId].start()

在每个线程中,我为传感器发送的事件设置回调处理程序,然后在最后进入循环。

while not self.shutdown:
self.plugin.sleep(0.5)

线程然后处理传入的事件并调用主线程或生成主线程的实际程序。所有这些都很好用。

但是,有时我还需要向特定传感器发送请求。为此,在每个线程中都定义了方法,我从主线程调用这些方法。例如:

self.phThreadDict[dev.id].writeDigitalOutput(textLine, lcdMessage)

这也有效,但我相信代码实际上是在主线程中执行的,而不是在特定于传感器的线程中执行的。

我的问题是:我有哪些选项可以将工作传递给特定的目标线程并让线程执行工作然后返回成功或失败?

最佳答案

对 Thomas Orozco 的评论进行了一些扩展,

self.phThreadDict[dev.id].writeDigitalOutput(textLine, lcdMessage)

在运行它的线程中执行。如果您 主线程运行它,那么主线程将完成所有操作。如果来自其他线程,则该线程将运行它。

除了每个线程一个 Queue 之外,为了让线程接收 要处理的工作项的描述,您还需要一个 Queue用于放置结果的线程(您也可以为此为每个线程使用另一个Queue,但这太过分了)。

主线程将从后者 Queue 中提取结果。请注意,您可以将元组放在 Queues 上,而且这样做很常见。因此,例如,在 talk-back-to-the-main-thread Queue 线程中可能会放置以下形式的元组:

(result, my_thread_id, original_work_description)

这足以确定哪个线程返回了响应哪个工作项的结果。也许你不需要所有这些。也许你需要的不止于此。猜不出来 ;-)

关于传递给唯一线程的 Python 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20315489/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com