我正在研究python项目,该项目包括在单击按钮时启动flask API server
。对于按钮和UI,我使用的是pyqt5
。因此,在“启动服务器”按钮上单击flask api服务器将启动,在“停止服务器”按钮上单击,flask api服务器将停止。
我能够启动服务器,但是问题是当启动flask API服务器时,我们使用app.run(HOST,80)
。在此期间,控件始终保留在此处,并且不会移出控件,因此当我单击停止按钮时,控件不会停止。下面是代码:
app.py
import sys
import time
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton
from server import start_local_server
from PyQt5.QtCore import pyqtSlot
from threading import Thread
run = True
def start_api_server():
while run:
start_local_server()
print("server is running")
time.sleep(1)
print("SERVER HAS STOPPED")
class App(QWidget):
global run
def __init__(self):
super().__init__()
self.title = 'PyQt5 button - pythonspot.com'
self.left = 10
self.top = 10
self.width = 320
self.height = 200
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left,self.top,self.width,self.height)
start_btn = QPushButton('Start Server',self)
start_btn.move(100,70)
start_btn.clicked.connect(self.on_click_start_btn)
stop_btn = QPushButton('Stop Server',self)
stop_btn.move(200,70)
stop_btn.clicked.connect(self.on_click_stop_btn)
fun_btn = QPushButton('Click to check responsiveness',self)
fun_btn.move(150,100)
fun_btn.clicked.connect(self.on_click_fun_btn)
self.show()
@pyqtSlot()
def on_click_start_btn(self):
Thread(target=start_api_server).start()
@pyqtSlot()
def on_click_stop_btn(self):
print("Stop server ")
run = False
@pyqtSlot()
def on_click_fun_btn(self):
print('If it is working,this means UI is responsive')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
在上面的代码中,我具有按钮单击功能on_click_start_btn
,这将启动一个目标为start_api_server
的线程。这将进一步启动本地flask服务器。当我想停止服务器时,只需将run
设置为False
即可,这将中断start_api_server
功能,并且服务器将停止。根据我的理解,这应该可以正常工作。
以下是flask api的代码:
server.py
import os
import datetime
from flask import Flask,jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
wsgi_app = app.wsgi_app
@app.route('/api/status')
def check_status():
return jsonify({'status': 'ok','date': datetime.datetime.now().isoformat()}),200
def start_local_server():
HOST = os.environ.get('SERVER_HOST','localhost')
try:
PORT = int(os.environ.get('SERVER_PORT','5555'))
except ValueError:
PORT = 5555
app.run(HOST,80)
上述烧瓶代码中出现问题。在上面的代码中,我们在start_local_server()
中使用了函数app.py
。在此有了app.run()
,当我们的代码到达此处时,它始终保留在此处,并且永远不会移出它,因此我无法停止此服务器。
我只想简单地编写代码,就可以使用按钮单击来启动和停止烧瓶服务器,但是由于app.run
,它无法正常工作。谁能帮我解决这个问题。除了上述问题,还有其他选择吗?请帮忙。谢谢
根据答案更新的代码:
server = Process
def start_local_server():
global server
server = Process(target=app.run,args=('localhost',80))
# HOST = os.environ.get('SERVER_HOST','localhost')
# try:
# PORT = int(os.environ.get('SERVER_PORT','5555'))
# except ValueError:
# PORT = 5555
# app.run(HOST,80)
def stop_local_server():
global server
server.terminate()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。