如何解决如何同时使用“时间表”和“运行”
我有一个计划脚本,用于运行以下任务:
schedule.every(3).seconds.do(jobCheckSmth)
while True:
schedule.run_pending()
time.sleep(1)
我想使用Web界面来检查其状态,而不是使用CLI上的print()
run(host='localhost',port=80,debug=True)
但是它阻止了代码执行,因此我必须按Ctrl-C来中断 webserver 循环才能继续运行 循环
Bottle v0.12.18 server starting up (using WSGIRefServer())...
Listening on http://localhost:80/ Hit Ctrl-C to quit.
解决方法
这是一个使用gevent
将瓶子变成异步的示例,对我来说非常有效。就是这样,或者您必须在Bottle应用程序之外的自己线程中运行schedule
。但老实说,您应该这样做。
import gevent
from gevent import monkey,spawn as gspawn,sleep as gsleep,socket,signal_handler as sig
monkey.patch_all()
import signal
import arrow
from bottle import Bottle,static_file,get,post,request,response,template,redirect,hook,route,abort
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
def start():
def start_thread():
set()
while 1:
try:
schedule.run_pending()
except:
logger.exception('Scheduler Exception')
gsleep(5) # This is the polling cycle for pending jobs
print('Scheduler Started...')
gspawn(start_thread)
def sample():
gspawn(jobCheckSmth)
def set():
# schedule.every(180).seconds.do(func)
schedule.every().day.at("00:00").do(sample)
logger.info('Started Schedule at {}'.format(arrow.now()))
@get('/')
def app():
return 'Hello World!'
if __name__ == '__main__':
scheduler.start()
botapp = bottle.app()
server = WSGIServer(("0.0.0.0",int(port)),botapp,handler_class=WebSocketHandler)
def shutdown():
print('Shutting down ...')
server.stop(timeout=60)
exit(signal.SIGTERM)
sig(signal.SIGTERM,shutdown)
sig(signal.SIGINT,shutdown)
server.serve_forever()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。