【问题标题】:Python scheduling a job starting every weekday and running every hourPython 安排一个工作,从每个工作日开始,每小时运行一次
【发布时间】:2017-11-03 00:37:14
【问题描述】:

我目前有一个示例代码定义为:

import schedule
import time

def job(t):
    print ("I'm working...", t)
    return

schedule.every().day.at("01:00").do(job,'It is 01:00')

while True:
    schedule.run_pending()
    time.sleep(60) # wait one minute

我希望在工作日的上午 9 点到下午 4 点每小时运行一次代码。即周一到周五的每一天,我想在上午 9 点、上午 10 点、...、下午 3 点、下午 4 点运行代码。

阅读schedule 的文档似乎我可以通过Friday 单独运行代码Monday,但不仅仅是两个指定时间之间的工作日。

另外,下面的time.sleep(60) 不应该让代码永久运行吗?

【问题讨论】:

    标签: python-3.x schedule


    【解决方案1】:

    它对我有用的唯一方法是:

    import schedule
    import datetime
    import time
    
    nowtime = str(datetime.datetime.now())
    
    def job(t):
        print("I'm working...", str(datetime.datetime.now()), t)
    
    for i in ["06:00", "09:00", "12:00", "15:00", "18:00"]:
        schedule.every().monday.at(i).do(job, i)
        schedule.every().tuesday.at(i).do(job, i)
        schedule.every().wednesday.at(i).do(job, i)
        schedule.every().thursday.at(i).do(job, i)
        schedule.every().friday.at(i).do(job, i)
    
    while True:
        schedule.run_pending()
        time.sleep(30)
    

    【讨论】:

      【解决方案2】:
      def weekday_job(x, t=None):
          week = datetime.today().weekday()
          if t is not None and week < 5:
              schedule.every().day.at(t).do(x)
      
      weekday_job(main, '01:00')
      weekday_job(main, '02:00')
      
      while True:
          schedule.run_pending()
          time.sleep(60)
      

      【讨论】:

      • 如果您希望有人帮助您,请确保对您的代码提出问题。 (有关指南,请参见此处:stackoverflow.com/help/how-to-ask
      • 这不是只有每天重启程序才有效吗?
      【解决方案3】:

      您可以使用库APScheduler。例如:

      from apscheduler.schedulers.blocking import BlockingScheduler
      
      def job_function():
          print("Hello World")
      
      sched = BlockingScheduler()
      
      # Runs from Monday to Friday at 5:30 (am) until
      sched.add_job(job_function, 'cron', day_of_week='mon-fri', hour=5, minute=30)
      sched.start()
      

      【讨论】:

        【解决方案4】:

        schedule 开始时看起来很有趣,但如果您需要更多时间,最终并没有真​​正的帮助。

        尝试使用pycron

        import pycron
        import time
        
        def job():
            timenow = time.localtime()
            print("I'm working...", str( time.strftime("%H:%M", timenow) )) 
        
        while True:
        #                     v----------------- on minute 0, so every full hour
        #                       v--------------- on hours 9 till 16
        #                            v v-------- every day in month and every month
        #                                v------ on weekdays monday till friday
            if pycron.is_now('0 9-16 * * mon-fri'):
                job()
            time.sleep(60)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-27
          • 2013-08-22
          • 2020-07-27
          • 1970-01-01
          • 1970-01-01
          • 2017-11-17
          相关资源
          最近更新 更多