我想要接收串行数据,并根据数据想要宣布。我的监控功能将持续监控串行数据。但我面临的问题是,当我宣布某件事,然后在完成后,串行数据被监测和进程缓慢。我想要连续监测串行数据,并希望发布并行声明。线程是最好的选择吗?怎么处理?
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")发布于 2015-11-12 08:23:51
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 -> do work -> die),那么这将是一个需要资源的解决方案。
有更有效的线程解决方案(例如在整个程序中保持线程活动,并在类中调用一个函数来代替)。但这是你开始工作所需的最低限度。
一旦你对线程感到满意
我将把这些链接留在这里,让您从上面这个非常基本的示例中实验和发展您的线程知识:
使用队列的
https://stackoverflow.com/questions/33666928
复制相似问题