Set up a scheduled job?

后端 未结 24 2526
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-22 01:13

I\'ve been working on a web app using Django, and I\'m curious if there is a way to schedule a job to run periodically.

Basically I just want to run through the dat

相关标签:
24条回答
  • 2020-11-22 01:42

    I had exactly the same requirement a while ago, and ended up solving it using APScheduler (User Guide)

    It makes scheduling jobs super simple, and keeps it independent for from request-based execution of some code. Following is a simple example.

    from apscheduler.schedulers.background import BackgroundScheduler
    
    scheduler = BackgroundScheduler()
    job = None
    
    def tick():
        print('One tick!')\
    
    def start_job():
        global job
        job = scheduler.add_job(tick, 'interval', seconds=3600)
        try:
            scheduler.start()
        except:
            pass
    

    Hope this helps somebody!

    0 讨论(0)
  • 2020-11-22 01:42

    Yes, the method above is so great. And I tried some of them. At last, I found a method like this:

        from threading import Timer
    
        def sync():
    
            do something...
    
            sync_timer = Timer(self.interval, sync, ())
            sync_timer.start()
    

    Just like Recursive.

    Ok, I hope this method can meet your requirement. :)

    0 讨论(0)
  • 2020-11-22 01:43

    I had something similar with your problem today.

    I didn't wanted to have it handled by the server trhough cron (and most of the libs were just cron helpers in the end).

    So i've created a scheduling module and attached it to the init .

    It's not the best approach, but it helps me to have all the code in a single place and with its execution related to the main app.

    0 讨论(0)
  • 2020-11-22 01:44

    One solution that I have employed is to do this:

    1) Create a custom management command, e.g.

    python manage.py my_cool_command
    

    2) Use cron (on Linux) or at (on Windows) to run my command at the required times.

    This is a simple solution that doesn't require installing a heavy AMQP stack. However there are nice advantages to using something like Celery, mentioned in the other answers. In particular, with Celery it is nice to not have to spread your application logic out into crontab files. However the cron solution works quite nicely for a small to medium sized application and where you don't want a lot of external dependencies.

    EDIT:

    In later version of windows the at command is deprecated for Windows 8, Server 2012 and above. You can use schtasks.exe for same use.

    **** UPDATE **** This the new link of django doc for writing the custom management command

    0 讨论(0)
  • 2020-11-22 01:44

    Look at Django Poor Man's Cron which is a Django app that makes use of spambots, search engine indexing robots and alike to run scheduled tasks in approximately regular intervals

    See: http://code.google.com/p/django-poormanscron/

    0 讨论(0)
  • 2020-11-22 01:45

    I use celery to create my periodical tasks. First you need to install it as follows:

    pip install django-celery
    

    Don't forget to register django-celery in your settings and then you could do something like this:

    from celery import task
    from celery.decorators import periodic_task
    from celery.task.schedules import crontab
    from celery.utils.log import get_task_logger
    @periodic_task(run_every=crontab(minute="0", hour="23"))
    def do_every_midnight():
     #your code
    
    0 讨论(0)
提交回复
热议问题