我正在尝试在两个独立模块中的两个线程之间交换简单数据,我找不到更好的方法来正确地执行它
这是我的架构: 我有一个主脚本启动我的两个线程:
from threading import Thread,RLock
from flask import Flask, render_template, request, url_for, redirect
GUI = Flask(__name__)
class ThreadGui(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
GUI.run()
wsgi_app = GUI.wsgi_app
@GUI.route('/')
def index():
print"INDEX"
return render_template("index.html")
@GUI.route('/prod')
def prod():
return render_template("prod.html")
@GUI.route('/maintenance')
def maintenance():
return render_template("maintenance.html")
@GUI.route('/button', methods = ['GET','POST'])
def button():
buttonState = True
print"le bouton est TRUE"
return redirect(url_for('prod'))
我的第一个帖子是一个带有FLASK应用程序的GUI。在这个GUI中,我按下HTML页面中的一个按钮,然后在按钮功能
中将buttonState切换为Truefrom threading import Thread,RLock
from globals import buttonState
import time
verrou = RLock()
class Sequencer(Thread):
def __init__(self):
Thread.__init__(self)
def run(self):
with verrou:
while 1:
if buttonState:
print"le bouton est true, redirection de l'ordre"
else:
time.sleep(2)
print"rien ne se passe"
在我的第二个帖子中,我需要收到有关更改的通知
form.setAttribute('id', "form");
我不知道让这两个线程讨论的方法。
答案 0 :(得分:2)
从您的描述中Event object看起来是最合理的解决方案:
class Sequencer(Thread):
def __init__(self, button_pressed_event):
Thread.__init__(self)
self._event = button_pressed_event
def run(self):
while not self._event.is_set():
time.sleep(2)
print ('Sleeping...')
print('Button was pressed!')
在您的GUI线程中,您只需在按下按钮后设置事件(event.set()
)。
如果您不关心调试,也可以简化run
方法:
def run(self):
self._event.wait()
print('Button was pressed!')