python - 如何在一个脚本中启动 Web 服务器并更新我的功能
问题描述
我启动一个服务器并使用我的函数中的一些数据。但我希望此功能能够更新数据并在我的服务器上显示新数据。但是,当我启动 Web 服务器时,它只从函数中获取第一个编译数据。
我使用“schedule” - 导入的库,它可以安排我的任务以在我选择的时间编译我的函数。还装了 web 框架来启动服务器并进行路由。
def read_file():
f=open("345.txt", "r")
hi.contents = f.read()
print(hi.contents)
def server_start():
@route('/as', method = 'GET')
def display_status():
try:
return hi.contents
except Exception:
logging.exception("")
return "Service unavailable. Check logs"
run(host='0.0.0.0', port=8033)
print("sadq")
schedule.every(3).seconds.do(read_file)
server_start()
while True:
schedule.run_pending()
time.sleep(1)
我希望在我的网络服务器上获得更新的结果。如果您能帮助我或提供一些好的建议,将非常高兴。谢谢大家。
解决方案
首先我会用一个异步进程运行瓶子,特别是 gevent。
import gevent
from gevent import monkey, signal
monkey.patch_all()
from bottle import app
import scheduler
app = Bottle()
@route('/as', method = 'GET')
def display_status():
try:
return scheduler.contents
except Exception:
logging.exception("")
return "Service unavailable. Check logs"
print("sadq")
server = WSGIServer(("0.0.0.0", int(8083)), app)
def shutdown():
print('Shutting down ...')
server.stop(timeout=60)
exit(signal.SIGTERM)
gevent.signal(signal.SIGTERM, shutdown)
gevent.signal(signal.SIGINT, shutdown) #CTRL C
server.serve_forever()
然后我会在一个单独的文件 scheduler.py 中启动你的调度程序:
from gevent import spawn, sleep
import schedule
contents = ''
def read_file():
global contents
f=open("345.txt", "r")
contents = f.read()
print(contents)
def start_thread():
while 1:
schedule.run_pending()
sleep(1)
schedule.every(3).seconds.do(read_file)
spawn(start_thread)
推荐阅读
- javascript - 如何获取事件监听器的功能?
- flutter - TextFormField Validator 在 Flutter 中不起作用
- antlr4 - ANTLR4 解析期间的 StackOverflowError
- java - 为什么这个素数会这样工作?
- javascript - 包含给定`type`的所有可能值的TypeScript`array`?
- laravel - 如何使用条码扫描仪和 DataTables Laravel
- gpu - 每帧更新数兆字节的顶点数据
- python - 为什么我会收到 NameError:未定义全局名称“阶段”
- python - 多个请求值的平均值
- python - 模块“int”没有属性“from_bytes”