Exemplo n.º 1
0
    else:
        log.info('The job worked :)')


scheduler.add_listener(
    scheduler_event_listener,
    apscheduler.events.EVENT_JOB_EXECUTED | apscheduler.events.EVENT_JOB_ERROR)


@scheduler.task(trigger='interval', seconds=60)
def tick():
    print('Tick! The time is: %s' % datetime.datetime.now())


log.info('jobs added', count=len(scheduler.get_jobs()))


@app.route('/')
def root():
    return "OK"


@app.route('/jobs')
def get_jobs():
    job_info = {"count": len(scheduler.get_jobs())}
    for job in scheduler.get_jobs():
        d = {
            "pending": job.pending,
            "id": job.id,
            "next_run_time": str(job.next_run_time)
Exemplo n.º 2
0
class TestScheduler(TestCase):
    def setUp(self):
        self.app = Flask(__name__)
        self.scheduler = APScheduler()
        self.scheduler_two = APScheduler(app=self.app)

    def test_running(self):
        self.assertFalse(self.scheduler.running)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)

    def test_start_with_allowed_hosts(self):
        self.app.config['SCHEDULER_ALLOWED_HOSTS'] = ['any_server_name']
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertFalse(self.scheduler.running)

    def test_start_without_allowed_hosts(self):
        self.app.config['SCHEDULER_ALLOWED_HOSTS'] = []
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertFalse(self.scheduler.running)

    def test_shutdown(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_load_jobs_from_config(self):
        self.app.config['JOBS'] = [{
            'id': 'job1',
            'func': 'tests.test_api:job1',
            'trigger': 'interval',
            'seconds': 10,
        }]
        self.app.config['SCHEDULER_JOBSTORES'] = {
            "default": apscheduler.jobstores.memory.MemoryJobStore()
        }
        self.app.config['SCHEDULER_EXECUTORS'] = {
            "default": {
                "type": "threadpool"
            }
        }
        self.app.config['SCHEDULER_JOB_DEFAULTS'] = {"coalesce": True}
        self.app.config['SCHEDULER_TIMEZONE'] = utc

        self.scheduler.init_app(app=self.app)
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

    def test_task_decorator(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

    def test_state_prop(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.state)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.state)

    def test_scheduler_prop(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertIsNotNone(self.scheduler.scheduler)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_pause_resume(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.pause()
        self.assertTrue(self.scheduler.state == 2)
        self.scheduler.resume()
        self.assertTrue(self.scheduler.state == 1)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_listener(self):
        self.scheduler.init_app(self.app)
        self.scheduler.start()
        self.assertTrue(self.scheduler.running)
        self.scheduler.add_listener(None)
        self.scheduler.remove_listener(None)
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_remove_job(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.scheduler.remove_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_delete_job(self):
        @self.scheduler.task('interval', seconds=10, id='job1')
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.scheduler.delete_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_remove_all_jobs(self):
        @self.scheduler.task('interval', hours=1, id='job1')
        def decorated_job():
            pass

        @self.scheduler.task('interval', hours=1, id='job2')
        def decorated_job2():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        jobs = self.scheduler.get_jobs()
        self.assertTrue(len(jobs) == 2)
        self.scheduler.remove_all_jobs()

        self.assertFalse(self.scheduler.get_job('job1'))
        self.assertFalse(self.scheduler.get_job('job2'))

        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_add_delete_all_jobs(self):
        @self.scheduler.task('interval', hours=1, id='job1')
        def decorated_job():
            pass

        @self.scheduler.task('interval', hours=1, id='job2')
        def decorated_job2():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        jobs = self.scheduler.get_jobs()
        self.assertTrue(len(jobs) == 2)
        self.scheduler.delete_all_jobs()

        self.assertFalse(self.scheduler.get_job('job1'))
        self.assertFalse(self.scheduler.get_job('job2'))

        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)

    def test_job_to_dict(self):
        @self.scheduler.task('interval',
                             hours=1,
                             id='job1',
                             end_date=datetime.datetime.now(),
                             weeks=1,
                             days=1,
                             seconds=99)
        def decorated_job():
            pass

        self.scheduler.init_app(self.app)
        self.scheduler.start()
        job = self.scheduler.get_job('job1')
        self.assertIsNotNone(job)

        self.assertTrue(len(utils.job_to_dict(job)))
        self.scheduler.delete_job('job1')
        self.assertFalse(self.scheduler.get_job('job1'))
        self.scheduler.shutdown()
        self.assertFalse(self.scheduler.running)
Exemplo n.º 3
0
                     "left": 1220,
                     "top": 20,
                     "position": "absolute",
                     "font-size": 20,
                     'backgroundColor': 'rgb(51, 151, 231,0.2)',
                     'fontWeight': '410',
                     "text-align": "center",
                     "border-radius": "5px"
                 }),
        html.Div(children=["周期持仓表", table1],
                 style={
                     'width': 1700,
                     'height': 550,
                     "left": 60,
                     "top": 700,
                     "position": "absolute",
                     "font-size": 20,
                     'backgroundColor': 'rgb(151, 151, 231,0.2)',
                     'fontWeight': '410',
                     "text-align": "center",
                     "border-radius": "5px"
                 })
    ]


if __name__ == '__main__':

    print(scheduler.get_jobs())

    server.run(host='127.0.0.1', port=8888, debug=True)
Exemplo n.º 4
0
def get_app():
    import atexit
    import os

    import yaml
    from flask import Flask
    from flask_apscheduler import APScheduler
    from apscheduler.jobstores.redis import RedisJobStore
    from apscheduler.jobstores.memory import MemoryJobStore

    from tracker_client_plugins import tracker_clients
    import docker_worker_pool
    from docker_worker_pool import get_cron_workers, DockerWorker

    global _app
    if _app is not None:
        return _app

    _app = Flask(__name__)

    # load tracker plugins
    try:
        with open('tracker_client_plugins.yaml', 'r') as f:
            tracker_dict = yaml.load(f, Loader=yaml.FullLoader)

        for plugin_name, kwargs in tracker_dict.items():
            tracker_clients.add(plugin_name, **kwargs)
    except FileNotFoundError:
        pass

    job_stores = {
        'redis':
        RedisJobStore(host=tracker_dict['redis_tracker_client']['host'],
                      port=tracker_dict['redis_tracker_client']['port']),
        'default':
        MemoryJobStore()
    }

    _app.config['SCHEDULER_JOBSTORES'] = job_stores

    scheduler = APScheduler()

    # it is also possible to enable the API directly
    # scheduler.api_enabled = True
    scheduler.init_app(_app)
    atexit.register(lambda: scheduler.shutdown(wait=False))

    num_workers = int(os.environ.get("NUM_WORKERS", 1))
    for i in range(num_workers):
        docker_worker_pool.add()

    scheduler.start()

    loaded_scheduled_jobs = scheduler.get_jobs(jobstore='redis')
    _cron_workers = get_cron_workers()
    if loaded_scheduled_jobs:
        for cron_job in loaded_scheduled_jobs:
            cron_worker_index = docker_worker_pool.get_cron_worker_index(
                cron_job.id)
            _cron_workers[cron_worker_index] = DockerWorker(
                cron_job.id, cron_job)

    return _app