i having trouble following scenario using python schedule module. want run login event @ time a, , run action @ time b.
the code not run intended behaviour describes , need help.
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()
edit have altered code following still doesn't seem right in terms of how best implement behaviour.
import sched import datetime 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()
the following code hasn't been tested should work. i've put original code comment can see got wrong. need refer doc: 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 function return 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 used relative delay. correct function use scheduler.enterabs need function convert datetime posix timestamp. can tricky in python 2.x due timezone issue. refer question: convert datetime unix timestamp , convert in python also, function takes 4 arguments.
#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()