Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Raspi python多线程,我想继续引用一个全局变量_Python_Python 3.x_Multithreading_Raspberry Pi - Fatal编程技术网

Raspi python多线程,我想继续引用一个全局变量

Raspi python多线程,我想继续引用一个全局变量,python,python-3.x,multithreading,raspberry-pi,Python,Python 3.x,Multithreading,Raspberry Pi,这是我的代码 RPi.GPIO是raspberrypi GPIO输入 多线程 导入线程 导入时间 进口测试剃须刀 全球电子邮件标志 电子邮件\u标志=0 def Mail(): 全球电子邮件标志 尽管如此: 打印(“邮件-翻到1”) email_flag=1 时间。睡眠(5) 打印(“邮件-翻到0”) 电子邮件\u标志=0 时间。睡眠(5) def razer(): 全球电子邮件标志 尽管如此: 时间。睡眠(1) 打印(“Razer reports标志为:”,email_标志) 测试剃须刀。剃须

这是我的代码

RPi.GPIO
是raspberrypi GPIO输入

多线程

导入线程
导入时间
进口测试剃须刀
全球电子邮件标志
电子邮件\u标志=0
def Mail():
全球电子邮件标志
尽管如此:
打印(“邮件-翻到1”)
email_flag=1
时间。睡眠(5)
打印(“邮件-翻到0”)
电子邮件\u标志=0
时间。睡眠(5)
def razer():
全球电子邮件标志
尽管如此:
时间。睡眠(1)
打印(“Razer reports标志为:”,email_标志)
测试剃须刀。剃须刀(电子邮件标志)
线程\邮件=线程。线程(目标=邮件)
线程\u Mail.start()
thread\u razer=threading.thread(target=razer)
线程\u razer.start()
测试剃须刀

导入时间
def剃须刀(A1):
虽然(正确):
打印(“结果:%d”%A1)
时间。睡眠(1)
结果

Mail - flipping to 1
Razer reports flag as: 1
result: 1
result: 1
result: 1
result: 1
Mail - flipping to 0
result: 1
result: 1
result: 1
result: 1
result: 1
Mail - flipping to 1
result: 1
result: 1
result: 1
result: 1
我想要的是来自
email\u标志的值被实时引用。
但是,仅在第一次调用函数时才引用该值。
while:razer(电子邮件标志)
是不允许的。在
razer()
中,它加载树莓pi的模块,还有一个
count
while
语句。
似乎没有办法找到它。 我该怎么办

附言。 原始测试剃须刀

将RPi.GPIO导入为GPIO
进口VL53L1X
导入时间
导入系统
输入信号
从子流程导入调用
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
按下红色=22
推白=23
GPIO.setup(按下红色,GPIO.IN)
GPIO.setup(推白,GPIO.IN)
#
tof=VL53L1X.VL53L1X(i2c_总线=1,i2c_地址=0x29)
tof.open()
tof.start_rangin(1)
运行=真
def出口_处理器(信号,帧):
全球运行
运行=错误
豆腐,停止
打印()
系统出口(0)
def runtof(电子邮件\u标志、主\u标志):
计数=0
运行时:
如果GPIO.input(推送红色)==1或GPIO.input(推送白色)==1:
距离_in_mm=tof.get_距离()
打印(“距离:{}mm”。格式(距离单位:mm))#

如果0 您需要创建另一个模块来定义
super
global,以便更好地描述

注意,您会注意到我并没有在您调用的地方调用
test\u razer.razer()
,因为
test\u razer.razer()
本身执行无限的
循环。相反,我给它,它自己的线程。否则,main的razer例程将只执行一次

配置变量py

email_flag = 0
test_razer.py

import time
import config_var

def razer():
    while(True):
        print("Test Razer reports: %d"%config_var.email_flag)
        time.sleep(0.5)
main.py

import threading
import time
import config_var
import test_razer

def Mail():
    while True:
        print("Mail - flipping to 1")
        config_var.email_flag = 1
        time.sleep(5)
        print("Mail - flipping to 0")
        config_var.email_flag = 0
        time.sleep(5)

def razer():
    while True:
        time.sleep(1)
        print("Razer reports flag as:",config_var.email_flag)
        #test_razer.razer()
        
thread_Mail = threading.Thread(target=Mail)
thread_Mail.start()
thread_razer = threading.Thread(target=razer)
thread_razer.start()
thread_test_razer = threading.Thread(target=test_razer.razer)
thread_test_razer.start()
结果:

Mail - flipping to 1
Test Razer reports: 1
Test Razer reports: 1
Razer reports flag as: 1
Test Razer reports: 1
Test Razer reports: 1
Razer reports flag as: 1
Test Razer reports: 1
Test Razer reports: 1
Razer reports flag as: 1
Test Razer reports: 1
Test Razer reports: 1
Razer reports flag as: 1
Test Razer reports: 1
Test Razer reports: 1
Mail - flipping to 0
Razer reports flag as: 0
Test Razer reports: 0
Test Razer reports: 0
Razer reports flag as: 0
Test Razer reports: 0
Test Razer reports: 0
Razer reports flag as: 0
Test Razer reports: 0
Test Razer reports: 0
Razer reports flag as: 0

即兴演出~
????还有一个额外的WTH!对于
razer()
(或者是
rager()
?)中的无休止的递归。好的,我上传了完整的代码,请检查它的拼写错误!谢谢,修正了代码中的错误。此代码在按下按钮之前工作正常。可能很奇怪,因为我的英语不好。是的,我考过了。然后尝试修复。谢谢,但当我按下按钮时它不会“睡眠”。。所以我在raspii中得到一个i/0错误,我将上传结果显示。我上传结果。@toy339更新的代码仍然可疑。什么是
self
作为函数
razer
Mail
的参数,为什么
razer
在定义为
razer(self)
时用
razer(email\u flag,main\u flag)
调用自己,为什么
razer
什么都不做
而是调用自己。我应该指出,除非你有一个树莓圆周率,完整的代码是不可能测试的。这就是为什么这么说的原因,我真的很抱歉。我犯了一个错误,因为我注册不久。我将参考您的代码,创建并上传问题所需的代码。很抱歉