Raspberry Pi中的Python多线程,全局变量和raw_input

时间:2014-01-02 20:17:38

标签: multithreading python-2.7 global-variables raspberry-pi raw-input

我是Python和RPi的新手。我会尽量使我的问题和示例代码尽可能通用。

我正在进行这种实现,我需要三个线程进行通信:

第一个线程只等待两个标志之一,全局变量flag1flag2变为TRUE

第二个线程等待来自用户的输入。如果用户输入“a”,则标志仍为FALSE。但是,如果用户输入任何其他字符串,flag1将变为TRUE

当按下按钮时,第三个线程会查看GPIO引脚并将flag2设置为TRUE

import threading
import time
import RPI.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP) #set GPIO 11 to PULL-UP input

flag1 = FALSE
flag2 = FALSE

def thread1():
    global flag1
    global flag2

    while 1:

        while flag1 == TRUE:
            print "flag1"
            flag1 = FALSE ##clear this flag
        while flag2 == TRUE:
            print "flag2"
            flag2 = FALSE ##clear this flag
        time.sleep(0.0001)

def button():
    global flag1

    if (GPIO.input(11) == True): #button is NOT pressed
        flag1 = FALSE
    else:
        flag2 = TRUE

    time.sleep(0.0001)

def input():
    global flag2
    x = "a"

    while (flag1 == FALSE) and (flag2 == FALSE):        
        y = raw_input("input: ")

        if x == y:
            print "input is a"
            flag1 = FALSE
        else:
            print "input is not a"
            flag1 = TRUE

t1 = threading.Thread(target = thread1)
t2 = threading.Thread(target = button)
t3 = threading.Thread(target = input)
t1.start()
t2.start()
t3.start()
while True:
     time.sleep(0.0001)

在提出这个问题之前,我独立编写了线程并且它们工作正常。但是我现在在将它们组合在一个程序中并使它们进行通信时遇到了麻烦。我认为我的问题是由于raw_input()函数的顺序性质。有替代方案吗?如果有帮助的话,我正在使用Python 2.7.3。任何提示或“编程优化”也将不胜感激。谢谢!

PS:我输入的硬件模拟带回车符的键盘。

0 个答案:

没有答案