python flask中添加多线程
这是我在写用树莓派通过局域网远程查看红外热释电人体传感器输出的一段代码,由于需要每隔一定时间查看一次红外热释电传感器的输出,我新建了一个线程在线程入口函数是body_thread,在入口函数中循环查看输入引脚的值。
刚开始在网上找到python多线程的写法是tb = Thread(target=body_thread(), args=())
然后就一直运行这一个线程了运行不到app.run(),找了很久终于发现target的函数不能加括号如果加括号他就直接运行了都不需要start。
from threading import Thread
from flask import Flask, render_template, request, redirect, url_for
import RPi.GPIO as GPIO
import time
pin = 7
app = Flask(__name__)
def body_thread():
while True:
print("Body_thread is running!")
if GPIO.getmode() == GPIO.BOARD:
if GPIO.input(pin) == GPIO.HIGH:
print("There are someone in my house!")
else:
print("There is no people!")
time.sleep(3)
def thread():
while True:
print("Thread is running!")
time.sleep(3)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
return redirect(url_for('body_off'))
return render_template('index.html')
@app.route('/body_off', methods=['GET', 'POST'])
def body_off():
GPIO.cleanup()
if request.method == 'POST':
return redirect(url_for('body_on'))
return render_template('body_off.html')
@app.route('/body_on', methods=['GET', 'POST'])
def body_on():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
if request.method == 'POST':
return redirect(url_for('body_off'))
return render_template('body_on.html')
if __name__ == '__main__':
tb = Thread(target=body_thread, args=())
test = Thread(target=thread, args=())
tb.start()
test.start()
app.run(host="0.0.0.0", port=5000, threaded=True)