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

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

最佳答案

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

有更有效的线程解决方案(例如在整个程序中保持线程处于事件状态,并在类中调用一个函数来代替)。但这是您入门所需的最低限度。

熟悉线程后

我将在此处留下这些链接,供您通过上面这个非常基本的示例进行实验和发展您的线程知识:

使用队列

关于python - 如何在python中并行运行多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666928/

相关文章:

锁定与性能的 Python 成本(多线程有意义吗?)

python - 将 python 程序设置为 SCHED_RR 或 SCHED_FIFO

python - 在 Linux 上无限期运行脚本的最可靠方法

python Selenium : wait until an element is no longer stale?

python - 根据不同数组的条件交换 2 个 numpy 数组

python - 如何将图像嵌入到 pandas DataFrame 并在 flask 网页中显示

python - 如何在等待 getch 的同时运行副任务?

python - 转储所有事件线程的堆栈跟踪

python - raspberryPi python 包安装在哪里?

Python多处理问题