我想接收串行数据,并根据要发布公告的数据。我的监控功能将持续监控串行数据。但我面临的一个问题是,当我宣布某些内容之后,在完成公告后,将监控串行数据并且流程进展缓慢。我想连续监视串行数据,并希望将声明并行。线程是最好的选择吗?如何处理?
def announce(data):
subprocess.call('espeak',data)
while 1:
receiveddata= xbee.readline()
if receiveddata=='a1':
announce("i am ok in room1")
if receiveddata=='b2':
announce("Urgently attend room 1")
答案 0 :(得分:1)
from threading import Thread
def announce(data):
subprocess.call('espeak',data)
class worker(Thread):
def __init__(self, data):
Thread.__init__(self)
self.data = data
def run(self):
if receiveddata=='a1':
announce("i am ok in room1")
if receiveddata=='b2':
announce("Urgently attend room 1")
# at the end of run() the process will die.
while 1:
receiveddata = xbee.readline()
thread_handle = worker(receiveddata)
thread_handle.start() # <- This starts the thread but keeps on going
这是一个骨架框架,您可以使用它来实现Python中的并行处理。它不完整也不完美,但它会给你一个开始,它将解决你最初的问题。
线程和东西有很多“最佳实践”,我会离开谷歌解释并找到那些,因为总会有一个比我在一个简短答案中可以产生的更好的解决方案。
我很荣幸你是python线程新手的事实。
但正如下面的评论中所讨论的,如果您在串行端口上有大量数据(create thread
- &gt; do work
- &gt; {{ 1}})。
有更有效的线程解决方案(例如在整个程序中保持线程活动并在类中调用函数来代替)。但这是您开始使用所需的最低限度。
我会在这里留下这些链接,让您从上面这个非常基本的例子中试验和发展您的线程知识:
使用队列