Python 如何在Django项目中设置APScheduler?

Python 如何在Django项目中设置APScheduler?,python,django,Python,Django,具体来说,如何 Django项目中的设置 开始跑步 写信给Django ORM 好吧,我来试试。假设您已经安装了apscheduler(或将其放在Python路径中),则列出了启动作业的以下代码: from apscheduler.scheduler import Scheduler sched = Scheduler() @sched.interval_schedule(hours=3) def some_job(): print "Decorated job" sched.c

具体来说,如何

  • Django项目中的设置
  • 开始跑步
  • 写信给Django ORM

    • 好吧,我来试试。假设您已经安装了apscheduler(或将其放在Python路径中),则列出了启动作业的以下代码:

      from apscheduler.scheduler import Scheduler
      
      sched = Scheduler()
      
      @sched.interval_schedule(hours=3)
      def some_job():
          print "Decorated job"
      
      sched.configure(options_from_ini_file)
      sched.start()
      
      我怀疑你的问题是如何在Django启动它。您有多种选择,主要包括“将它放在将要运行的地方”。例如,将其添加到
      models.py
      文件的底部,或添加到
      url.py
      中,每次Django重新启动时将对其进行一次处理,然后继续在后台运行。然后,可以在函数中正常地执行数据库访问—只需将模型作为正常的查询导入即可


      但是,如果你这样做,你将需要在任何时候改变和重新启动你的服务器。我也不确定多线程的情况如何(你会有>1个计时器吗?)


      你可能真的想考虑一下(通过)让你得到这一切,再加上一个单独的调度守护进程,对调度有更精细的控制。

      < P>使用这个AppMe调器,你可以用下面的代码设置它,您唯一可能遇到困难的部分是推荐使用jobstore
      sqlalchemy
      ,但由于您已经有了django ORM,因此也可以使用它

         from apscheduler.schedulers.background import BackgroundScheduler
      
         scheduler = BackgroundScheduler()
         scheduler.start()
      
        def myjob():
           print('hello')
      
      
        scheduler.add_job(myjob, 'cron', hour=0)
        scheduler.add_job(
           myjob,
           'date',
           id=id_value,
           jobstore="default",
           run_date=scheduler_date,
           replace_existing=True
        )
      
      我建议使用:它已经与jobstore和Djangorm集成,还提供了一个web界面来管理作业

      对于django apscheduler,可以使用以下代码

      import time
      
      from apscheduler.schedulers.background import BackgroundScheduler
      from django_apscheduler.jobstores import DjangoJobStore, register_events, 
      register_job
      
      scheduler = BackgroundScheduler()
      scheduler.add_jobstore(DjangoJobStore(), "default")
      
      @register_job(scheduler, "interval", seconds=1)
      def test_job():
          time.sleep(4)
          print("I'm a test job!")
          # raise ValueError("Olala!")
      
      register_events(scheduler)
      
      scheduler.start()
      print("Scheduler started!")
      

      你想要实现什么?你写Django ORM是什么意思?我们可以给你一个和你的问题一样清楚的回答:安装Django,安装APScheduler。写下你的观点。使用“添加日期”作业添加作业。在这项工作中,你可以在任何地方做你想做的事情。由于APScheduler支持SQLAlchemy和MongoDb作为工作存储,他想使用Django ORM。我猜。谢谢,创业对我来说是最有趣的一点。我在看APScheduler,因为芹菜中的CrontabScheduler不支持小于分钟的分辨率,IntervalsScheduler也不像APScheduler那样支持开始日期。这意味着“每一个星期一”和“星期一20:14:50”这样的事情是不可能开箱即用的。但我决定坚持使用芹菜,并使用自定义调度程序。我更喜欢有一个独立的进程,它在Web服务器进程之外运行。“更容易控制和调试,”IMO.“但是,如果你这样做,你将需要杀死和重新启动你的服务器任何时候你想改变日程安排。”实际上,这并不一定需要杀死服务器。简单地启动APscheduler不需要添加作业。OP可以简单地在某个地方启动调度程序,然后在其他地方编写代码,以便根据需要添加和删除作业,例如在特定用户的视图中。如果OP不想处理使用芹菜的开销并计划保持简单,这仍然是一个选项。如果您在Heroku上部署,您是否可以创建一个
      clock.py
      文件并从Procfile调用它?(