如何在python中并行运行多个函数

时间:2015-11-12 08:15:47

标签: python multithreading raspberry-pi

我想接收串行数据,并根据要发布公告的数据。我的监控功能将持续监控串行数据。但我面临的一个问题是,当我宣布某些内容之后,在完成公告后,将监控串行数据并且流程进展缓慢。我想连续监视串行数据,并希望将声明并行。线程是最好的选择吗?如何处理?

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")

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}})。

有更有效的线程解决方案(例如在整个程序中保持线程活动并在类中调用函数来代替)。但这是您开始使用所需的最低限度。

一旦你对线程感到满意

我会在这里留下这些链接,让您从上面这个非常基本的例子中试验和发展您的线程知识:

使用队列