Python 如何使用';附表';和';运行';在一起

Python 如何使用';附表';和';运行';在一起,python,schedule,bottle,Python,Schedule,Bottle,我有一个运行作业的计划脚本,其中包含: schedule.every(3).seconds.do(jobCheckSmth) while True: schedule.run_pending() time.sleep(1) 我想使用web界面检查它的状态,而不是使用 run(host='localhost', port=80, debug=True) 但它会阻止代码执行,所以我必须按住Ctrl-C键才能中断Web服务器循环,以便在循环期间继续运行 下面是一个非常适合我的示例

我有一个运行作业的计划脚本,其中包含:

schedule.every(3).seconds.do(jobCheckSmth)

while True:
    schedule.run_pending()
    time.sleep(1)
我想使用web界面检查它的状态,而不是使用

run(host='localhost', port=80, debug=True)
但它会阻止代码执行,所以我必须按住Ctrl-C键才能中断Web服务器循环,以便在循环期间继续运行


下面是一个非常适合我的示例,它使用
gevent
将瓶子转换为异步。要么就是这样,要么你必须在你的瓶子应用程序之外的自己的线程中运行
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()

我正在调查线程来做这项工作…线程行为已经完成。。。请建议我猜您必须在单独的进程上运行您的Web服务器,并将其与主进程一起提供一些外部更新(json文件或DB),因此@SebastienDYou需要了解异步设计。感谢您提供详细的示例。我将努力实现这个想法。我会随时通知你的。再次感谢!在你的答复上加上“向上投票”。我的排名还不足以证明这一点。我如何接受你的工作?
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()