为什么赢得的功能并行运行?

时间:2016-09-12 01:19:03

标签: python linux raspberry-pi gpio

我一直在阅读并试图在我的程序中实现多线程,但不管我怎么做,它都不会并行运行我的函数。我使用传感器作为树莓派3,尝试让它们并行打印状态,而不是等待一个完成,然后转到下一个功能。

现在发生的事情是它在程序检查秒传感器之前等待那20秒并打印出该状态消息。我不明白为什么!

代码:

import RPi.GPIO as GPIO
import time
from multiprocessing import Process

''' Define pins and setup the sensors '''

def runInParallel(*fns):
    proc = []
    for fn in fns:
        p = Process(target=fn)
        p.start()
        proc.append(p)
    for p in proc:
        p.join()

def sensor1():
    #Sleep timer long so I can check that I can see prints from 2nd sensor while this thread is sleeping
    time.sleep(20)
#Get status from sensor---
    if status == 1:
        print "Ouch!"
    else:
        print "Good!"

def sensor2():
    time.sleep(0.2)
#Get status from 2nd sensor---
    if status == 1:
        print "Ouch2!"
    else:
        print "Good2!"

runInParallel(sensor1, sensor2)

1 个答案:

答案 0 :(得分:1)

我不知道为什么你的例子不起作用,但我试过这个:

    import time
    from threading import Thread

    ''' Define pins and setup the sensors '''
    status = 0

    def runInParallel(*fns):
        proc = []
        for fn in fns:
            p = Thread(target=fn)
            proc.append(p)
        for p in proc:
            p.start()

    def sensor1():
        #Sleep timer long so I can check that I can see prints from 2nd sensor while this thread is sleeping
        time.sleep(.2)
    #Get status from sensor---
        if status == 1:
            print("Ouch!")
        else:
            print("Good!")



    def sensor2():
        time.sleep(0.2)
    #Get status from 2nd sensor---
        if status == 1:
            print("Ouch2!")
        else:
            print("Good2!")

    runInParallel(sensor1, sensor2)

几乎同时输出good2good。如果你真的需要输出是准确的,那么试着调试你的例子,但是如果比用肉眼可以注意到的更接近就可以了,那么我认为线程模块可以运行得很好。

编辑:

好吧我认为你的问题是你认为Process.join()计算函数中的等待。 Process.join()仅确保函数同时启动。如果您在一个功能中等待,那么runInParallel将不关心这一点。