I want to schedule a text 'hello world' at various timings (form a list), since the script has started. What would be the best way to do it?
This is probably wrong, but what I have so far:
import time
times = [1.76493425, 3.10174059, 4.49576803, 10.99379224, 18.84178369] #at these times since onset of script, a text "hello world" should be printed
start = time.time()
def main():
for cuetime in times:
print ('hello world', ' - timing: ', cuetime, ' - now: ', time.time()- start)
yield viztask.waitTime(cuetime)
main()
This gives me:
('hello world', ' - timing: ', 1.76493425, ' - now: ', 0.0)
('hello world', ' - timing: ', 3.10174059, ' - now: ', 1.7699999809265137)
('hello world', ' - timing: ', 4.49576803, ' - now: ', 3.5379998683929443)
('hello world', ' - timing: ', 10.99379224, ' - now: ', 5.305999994277954)
('hello world', ' - timing: ', 18.84178369, ' - now: ', 7.075000047683716)
But what I actually need is the timing elements/items to be the same as the "now" time, because the elements in the timing list ARE the timings at which the text "hello world" should be printed relative to the onset of the script.
What about schedule
module. Haven't worked with it before, but you can achieve your goal quite easily:
import schedule
import time
from functools import partial
# your specified list of times
times = [1.76493425, 3.10174059, 4.49576803, 10.99379224, 18.84178369]
# define a job you want to do
def job(t, start):
print ('hello world', ' - timing: ', t, ' - now: ', time.time()- start)
# pop the job right away from schedule.jobs, so it runs only once
return schedule.CancelJob
# get the starting time
start = time.time()
# for each time add what to do
for t in times:
# using partial so i can pass arguments to job
schedule.every(t).seconds.do(partial(job, t, start))
# and run it inside a lop
while True:
schedule.run_pending()
# schedule.jobs is just a list of jobs
if not schedule.jobs:
break
Prints out:
hello world - timing: 1.76493425 - now: 1.7650279998779297
hello world - timing: 3.10174059 - now: 3.101846933364868
hello world - timing: 4.49576803 - now: 4.495898962020874
hello world - timing: 10.99379224 - now: 10.993950605392456
hello world - timing: 18.84178369 - now: 18.84195566177368