【问题标题】:rSimple python schedule two timed events简单的python安排两个定时事件
【发布时间】:2015-07-06 15:57:38
【问题描述】:

我在使用 python 调度模块的以下场景中遇到问题。本质上我想在时间 A 运行登录事件,然后在时间 B 运行操作。

代码没有按照预期的行为描述运行,这是我需要帮助的地方。

import sched
import datetime

today = datetime.datetime.today()
log = today.replace(hour=11, minute=59, second = 0)
action= today.replace(hour=12, minute=0, second = 0)

scheduler = sched.scheduler(datetime.datetime.today(), time.sleep)

def login_event(name):
    print 'EVENT:', datetime.datetime.today(), name

def action_event(name):
    print 'EVENT:' datetime.datetime.today(),name

print 'START:', time.time()
scheduler.enter(log, login_event, ('Login'))
scheduler.enter(action, login_event, ('Action'))

scheduler.run()

编辑我已将代码更改为以下内容,但就如何最好地实现此行为而言,它似乎仍然不正确。

import sched
import datetime
from datetime import timedelta
import datetime
import time

today = datetime.datetime.today()
log = datetime.datetime.now() + timedelta(minutes=1)# today.replace(hour=12, minute=46, second = 0)
action= log + timedelta(minutes=2)


scheduler = sched.scheduler(time.time, time.sleep)
print datetime.datetime.now

def login_event(name):
    print 'Login:', datetime.datetime.now(), name

def action_event(name):
    print 'Action:', datetime.datetime.now(), name

print 'Start:', datetime.datetime.now()

scheduler.enter(1, 1, login_event, ('first',))
scheduler.enter(60, 1, action_event, ('second',))

scheduler.run()

【问题讨论】:

  • 那么,你有什么问题?
  • 上面的代码不像预期的行为描述的那样工作。我需要帮助调整调度程序代码以按所需方式工作
  • 您能否更具体地说明它是如何失败的,因为我可以在您的代码中看到多个可能需要修改的地方。
  • schedular不能这样用,都是用错了?

标签: python schedule python-datetime


【解决方案1】:

以下代码未经测试,但应该可以工作。 我已将您的原始代码放入注释中,以便您查看哪里出错了。 您可能需要参考文档:https://docs.python.org/2/library/sched.html

import sched, time
import datetime

today = datetime.datetime.today()
log = today.replace(hour=11, minute=59, second = 0)
action= today.replace(hour=12, minute=0, second = 0)

#scheduler = sched.scheduler(datetime.datetime.today(), time.sleep)
#The first argument of sched.scheduler should be a function that return a number.
scheduler = sched.scheduler(time.time, time.sleep)

def login_event(name):
    print 'EVENT:', datetime.datetime.today(), name

def action_event(name):
    print 'EVENT:', datetime.datetime.today(),name

print 'START:', time.time()

scheduler.enter 用于相对延迟。正确使用的函数是 scheduler.enterabs 您将需要一个函数将日期时间转换为 POSIX 时间戳。 由于时区问题,这在 python 2.x 中可能很棘手。 参考这个问题:Convert datetime to Unix timestamp and convert it back in python 此外,该函数接受 4 个参数。

#scheduler.enter(log, login_event, ('Login'))
#scheduler.enter(action, login_event, ('Action'))
scheduler.enterabs(timestamp(log), 0, login_event, ('Login'))
scheduler.enterabs(timestamp(action), 0, action_event, ('Action'))

scheduler.run()

【讨论】:

  • 有帮助,但正如你所说,它本身并不能完全运行,值得注意的是我很乐意使用本地机器时间
【解决方案2】:

https://github.com/dbader/schedule

通过遵循上面链接的模式,我能够使用稍微不同的调度模块创建所需的行为

import schedule
import time

def job():
    print("I'm working on job one...")

def job2():
    print("I'm working on job two..")

schedule.every().day.at("10:30").do(job)
schedule.every().day.at("10:35").do(job2)


while True:
    schedule.run_pending()
    time.sleep(1)

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多