Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Schedule every hour #55

Closed
DieterKoblenz opened this issue Sep 8, 2015 · 11 comments
Closed

Schedule every hour #55

DieterKoblenz opened this issue Sep 8, 2015 · 11 comments

Comments

@DieterKoblenz
Copy link

At the moment it is possible to schedule a task to run every hour however it schedules the task every hour from the moment it is added to the cue. There is no convenient way to schedule a task every "whole" hour (You'd have to add the job 24 times on the hour..)

Suggestion for improvement: enable "whole hour" cues.

@dylwhich
Copy link
Contributor

Try this:

schedule.every().hour.at('00:00').do(job)

It's the same syntax as for performing a task at the specified time each day, but the hour component will be ignored.

@DieterKoblenz
Copy link
Author

But with the hour component ignored, won't it only be executed at 00:00?

@dylwhich
Copy link
Contributor

Sorry, I meant the hour component in the 'at' clause. It will ignore that value since it only applies to every().day, and just use the minute; so for example every().hour.at('00:30') will execute the job every half hour, and should be identical to every().hour.at('23:00').

I think this is a little quirky, and it would work a lot better with a specialized at statement, so for every day you could have: every().day.at_time('11:45') (basically the current functionality of at), or if you want it to run at a certain minute every hour it could instead be every().hour.at_minute('30'). This would also make it easier to add support for seconds in at, of which I'm a fan.

@631068264
Copy link

@dylwhich at_time() is not work.

    schedule.every().day.at_time("22:37").do(daily_task)
TypeError: 'NoneType' object is not callable

@dylwhich
Copy link
Contributor

Sorry, I should have been more clear; the second paragraph of my comment is a theoretical description of how it could be changed to work a bit more flexibly/clearly. every().day.at("22:37").do(daily_task) should currently work as expected though.

@dgrant
Copy link

dgrant commented Nov 28, 2016

This already works, or was fixed at some point. You can do:
schedule.every().hour.at(':00').do(job)

@dbader Please close this issue.

@dgrant
Copy link

dgrant commented Dec 12, 2016

If my PR gets approved, it will throw an assertion error if you try to do schedule.every().hour.at('00:00').do(job), it will suggest you do schedule.every().hour.at(':00').do(job) instead.

@lucaNicoli88
Copy link

@dgrant I would like to execute my job every hour ad xx:45.
If I try schedule.every().hour.at(':45').do(make_prediction, p, log_file), it does not work.
I can execute the job only once time at 45.

Can you help me?

@rokcarl
Copy link

rokcarl commented Jul 9, 2018

This does not work, @dgrant.
Here's my output:

Mon Jul  9 15:00:56 2018
Mon Jul  9 16:00:57 2018
Mon Jul  9 17:04:01 2018
Mon Jul  9 18:04:58 2018

Here's the code that did this, modified, but the main ingredients are here:

import schedule
import time

def do_something():
    # some work here
    pass

def print_time():
    print(time.asctime())
    time.sleep(100)

schedule.every().hour.do(do_something)
schedule.every().hour.at(':00').do(print_time)

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

@rokcarl
Copy link

rokcarl commented Jul 9, 2018

I've seen this use case requested a few times here (e.g. #144) but no solution has been provided. Quite a common use case. I really hope we get something reliable.

@SijmenHuizenga
Copy link
Collaborator

Let's take a closer look at the example provided by @rokcarl and investigate further. I've taken the following snippet:

import schedule
import time

def job():
    print("job", time.asctime())
    time.sleep(100)

schedule.every().hour.at(':00').do(job)

while True:
    print("run_pending", time.asctime())
    schedule.run_pending()
    time.sleep(60)

and let it ran for a few ours. It gave the following output:

Click here to expand.
run_pending Sat Nov 21 13:16:16 2020
run_pending Sat Nov 21 13:17:16 2020
run_pending Sat Nov 21 13:18:17 2020
run_pending Sat Nov 21 13:19:17 2020
run_pending Sat Nov 21 13:20:17 2020
run_pending Sat Nov 21 13:21:17 2020
run_pending Sat Nov 21 13:22:17 2020
run_pending Sat Nov 21 13:23:17 2020
run_pending Sat Nov 21 13:24:17 2020
run_pending Sat Nov 21 13:25:17 2020
run_pending Sat Nov 21 13:26:17 2020
run_pending Sat Nov 21 13:27:17 2020
run_pending Sat Nov 21 13:28:17 2020
run_pending Sat Nov 21 13:29:17 2020
run_pending Sat Nov 21 13:30:17 2020
run_pending Sat Nov 21 13:31:17 2020
run_pending Sat Nov 21 13:32:17 2020
run_pending Sat Nov 21 13:33:17 2020
run_pending Sat Nov 21 13:34:17 2020
run_pending Sat Nov 21 13:35:17 2020
run_pending Sat Nov 21 13:36:17 2020
run_pending Sat Nov 21 13:37:17 2020
run_pending Sat Nov 21 13:38:17 2020
run_pending Sat Nov 21 13:39:17 2020
run_pending Sat Nov 21 13:40:18 2020
run_pending Sat Nov 21 13:41:18 2020
run_pending Sat Nov 21 13:42:18 2020
run_pending Sat Nov 21 13:43:18 2020
run_pending Sat Nov 21 13:44:18 2020
run_pending Sat Nov 21 13:45:18 2020
run_pending Sat Nov 21 13:46:18 2020
run_pending Sat Nov 21 13:47:18 2020
run_pending Sat Nov 21 13:48:18 2020
run_pending Sat Nov 21 13:49:18 2020
run_pending Sat Nov 21 13:50:18 2020
run_pending Sat Nov 21 13:51:18 2020
run_pending Sat Nov 21 13:52:18 2020
run_pending Sat Nov 21 13:53:18 2020
run_pending Sat Nov 21 13:54:18 2020
run_pending Sat Nov 21 13:55:18 2020
run_pending Sat Nov 21 13:56:18 2020
run_pending Sat Nov 21 13:57:18 2020
run_pending Sat Nov 21 13:58:18 2020
run_pending Sat Nov 21 13:59:18 2020
run_pending Sat Nov 21 14:00:18 2020
job Sat Nov 21 14:00:18 2020
run_pending Sat Nov 21 14:02:59 2020
run_pending Sat Nov 21 14:03:59 2020
run_pending Sat Nov 21 14:04:59 2020
run_pending Sat Nov 21 14:05:59 2020
run_pending Sat Nov 21 14:06:59 2020
run_pending Sat Nov 21 14:07:59 2020
run_pending Sat Nov 21 14:08:59 2020
run_pending Sat Nov 21 14:09:59 2020
run_pending Sat Nov 21 14:10:59 2020
run_pending Sat Nov 21 14:11:59 2020
run_pending Sat Nov 21 14:12:59 2020
run_pending Sat Nov 21 14:13:59 2020
run_pending Sat Nov 21 14:14:59 2020
run_pending Sat Nov 21 14:15:59 2020
run_pending Sat Nov 21 14:16:59 2020
run_pending Sat Nov 21 14:17:59 2020
run_pending Sat Nov 21 14:18:59 2020
run_pending Sat Nov 21 14:19:59 2020
run_pending Sat Nov 21 14:20:59 2020
run_pending Sat Nov 21 14:22:00 2020
run_pending Sat Nov 21 14:23:00 2020
run_pending Sat Nov 21 14:24:00 2020
run_pending Sat Nov 21 14:25:00 2020
run_pending Sat Nov 21 14:26:00 2020
run_pending Sat Nov 21 14:27:00 2020
run_pending Sat Nov 21 14:28:00 2020
run_pending Sat Nov 21 14:29:00 2020
run_pending Sat Nov 21 14:30:00 2020
run_pending Sat Nov 21 14:31:00 2020
run_pending Sat Nov 21 14:32:00 2020
run_pending Sat Nov 21 14:33:00 2020
run_pending Sat Nov 21 14:34:00 2020
run_pending Sat Nov 21 14:35:00 2020
run_pending Sat Nov 21 14:36:00 2020
run_pending Sat Nov 21 14:37:00 2020
run_pending Sat Nov 21 14:38:00 2020
run_pending Sat Nov 21 14:39:00 2020
run_pending Sat Nov 21 14:40:00 2020
run_pending Sat Nov 21 14:41:00 2020
run_pending Sat Nov 21 14:42:00 2020
run_pending Sat Nov 21 14:43:00 2020
run_pending Sat Nov 21 14:44:01 2020
run_pending Sat Nov 21 14:45:01 2020
run_pending Sat Nov 21 14:46:01 2020
run_pending Sat Nov 21 14:47:01 2020
run_pending Sat Nov 21 14:48:01 2020
run_pending Sat Nov 21 14:49:01 2020
run_pending Sat Nov 21 14:50:01 2020
run_pending Sat Nov 21 14:51:01 2020
run_pending Sat Nov 21 14:52:01 2020
run_pending Sat Nov 21 14:53:01 2020
run_pending Sat Nov 21 14:54:01 2020
run_pending Sat Nov 21 14:55:01 2020
run_pending Sat Nov 21 14:56:01 2020
run_pending Sat Nov 21 14:57:01 2020
run_pending Sat Nov 21 14:58:01 2020
run_pending Sat Nov 21 14:59:01 2020
run_pending Sat Nov 21 15:00:01 2020
job Sat Nov 21 15:00:01 2020
run_pending Sat Nov 21 15:02:41 2020
run_pending Sat Nov 21 15:03:41 2020
run_pending Sat Nov 21 15:04:42 2020
run_pending Sat Nov 21 15:05:42 2020
run_pending Sat Nov 21 15:06:42 2020
run_pending Sat Nov 21 15:07:42 2020
run_pending Sat Nov 21 15:08:42 2020
run_pending Sat Nov 21 15:09:42 2020
run_pending Sat Nov 21 15:10:42 2020
run_pending Sat Nov 21 15:11:42 2020
run_pending Sat Nov 21 15:12:42 2020
run_pending Sat Nov 21 15:13:42 2020
run_pending Sat Nov 21 15:14:42 2020
run_pending Sat Nov 21 15:15:42 2020
run_pending Sat Nov 21 15:16:42 2020
run_pending Sat Nov 21 15:17:42 2020
run_pending Sat Nov 21 15:18:42 2020
run_pending Sat Nov 21 15:19:42 2020
run_pending Sat Nov 21 15:20:42 2020
run_pending Sat Nov 21 15:21:42 2020
run_pending Sat Nov 21 15:22:42 2020
run_pending Sat Nov 21 15:23:42 2020
run_pending Sat Nov 21 15:24:42 2020
run_pending Sat Nov 21 15:25:42 2020
run_pending Sat Nov 21 15:26:43 2020
run_pending Sat Nov 21 15:27:43 2020
run_pending Sat Nov 21 15:28:43 2020
run_pending Sat Nov 21 15:29:43 2020
run_pending Sat Nov 21 15:30:43 2020
run_pending Sat Nov 21 15:31:43 2020
run_pending Sat Nov 21 15:32:43 2020
run_pending Sat Nov 21 15:33:43 2020
run_pending Sat Nov 21 15:34:43 2020
run_pending Sat Nov 21 15:35:43 2020
run_pending Sat Nov 21 15:36:43 2020
run_pending Sat Nov 21 15:37:43 2020
run_pending Sat Nov 21 15:38:43 2020
run_pending Sat Nov 21 15:39:43 2020
run_pending Sat Nov 21 15:40:43 2020
run_pending Sat Nov 21 15:41:43 2020
run_pending Sat Nov 21 15:42:43 2020
run_pending Sat Nov 21 15:43:43 2020
run_pending Sat Nov 21 15:44:43 2020
run_pending Sat Nov 21 15:45:43 2020
run_pending Sat Nov 21 15:46:43 2020
run_pending Sat Nov 21 15:47:44 2020
run_pending Sat Nov 21 15:48:44 2020
run_pending Sat Nov 21 15:49:44 2020
run_pending Sat Nov 21 15:50:44 2020
run_pending Sat Nov 21 15:51:44 2020
run_pending Sat Nov 21 15:52:44 2020
run_pending Sat Nov 21 15:53:44 2020
run_pending Sat Nov 21 15:54:44 2020
run_pending Sat Nov 21 15:55:44 2020
run_pending Sat Nov 21 15:56:44 2020
run_pending Sat Nov 21 15:57:44 2020
run_pending Sat Nov 21 15:58:44 2020
run_pending Sat Nov 21 15:59:44 2020
run_pending Sat Nov 21 16:00:44 2020
job Sat Nov 21 16:00:44 2020
run_pending Sat Nov 21 16:03:24 2020
run_pending Sat Nov 21 16:04:24 2020
run_pending Sat Nov 21 16:05:24 2020
run_pending Sat Nov 21 16:06:24 2020
run_pending Sat Nov 21 16:07:24 2020
run_pending Sat Nov 21 16:08:24 2020
run_pending Sat Nov 21 16:09:25 2020
run_pending Sat Nov 21 16:10:25 2020
run_pending Sat Nov 21 16:11:25 2020
run_pending Sat Nov 21 16:12:25 2020
run_pending Sat Nov 21 16:13:25 2020
run_pending Sat Nov 21 16:14:25 2020
run_pending Sat Nov 21 16:15:25 2020
run_pending Sat Nov 21 16:16:25 2020
run_pending Sat Nov 21 16:17:25 2020
run_pending Sat Nov 21 16:18:25 2020
run_pending Sat Nov 21 16:19:25 2020
run_pending Sat Nov 21 16:20:25 2020
run_pending Sat Nov 21 16:21:25 2020
run_pending Sat Nov 21 16:22:25 2020
run_pending Sat Nov 21 16:23:25 2020
run_pending Sat Nov 21 16:24:25 2020
run_pending Sat Nov 21 16:25:25 2020
run_pending Sat Nov 21 16:26:25 2020
run_pending Sat Nov 21 16:27:25 2020
run_pending Sat Nov 21 16:28:25 2020
run_pending Sat Nov 21 16:29:25 2020
run_pending Sat Nov 21 16:30:26 2020
run_pending Sat Nov 21 16:31:26 2020
run_pending Sat Nov 21 16:32:26 2020
run_pending Sat Nov 21 16:33:26 2020
run_pending Sat Nov 21 16:34:26 2020
run_pending Sat Nov 21 16:35:26 2020
run_pending Sat Nov 21 16:36:26 2020
run_pending Sat Nov 21 16:37:26 2020
run_pending Sat Nov 21 16:38:26 2020
run_pending Sat Nov 21 16:39:26 2020
run_pending Sat Nov 21 16:40:26 2020
run_pending Sat Nov 21 16:41:26 2020
run_pending Sat Nov 21 16:42:26 2020
run_pending Sat Nov 21 16:43:26 2020
run_pending Sat Nov 21 16:44:26 2020
run_pending Sat Nov 21 16:45:26 2020
run_pending Sat Nov 21 16:46:26 2020
run_pending Sat Nov 21 16:47:26 2020
run_pending Sat Nov 21 16:48:26 2020
run_pending Sat Nov 21 16:49:26 2020
run_pending Sat Nov 21 16:50:26 2020
run_pending Sat Nov 21 16:51:26 2020
run_pending Sat Nov 21 16:52:27 2020
run_pending Sat Nov 21 16:53:27 2020
run_pending Sat Nov 21 16:54:27 2020
run_pending Sat Nov 21 16:55:27 2020
run_pending Sat Nov 21 16:56:27 2020
run_pending Sat Nov 21 16:57:27 2020
run_pending Sat Nov 21 16:58:27 2020
run_pending Sat Nov 21 16:59:27 2020
run_pending Sat Nov 21 17:00:27 2020
job Sat Nov 21 17:00:27 2020
run_pending Sat Nov 21 17:03:07 2020
run_pending Sat Nov 21 17:04:07 2020
run_pending Sat Nov 21 17:05:07 2020
run_pending Sat Nov 21 17:06:07 2020
run_pending Sat Nov 21 17:07:07 2020
run_pending Sat Nov 21 17:08:07 2020
run_pending Sat Nov 21 17:09:07 2020
run_pending Sat Nov 21 17:10:07 2020
run_pending Sat Nov 21 17:11:07 2020
run_pending Sat Nov 21 17:12:07 2020
run_pending Sat Nov 21 17:13:07 2020
run_pending Sat Nov 21 17:14:07 2020
run_pending Sat Nov 21 17:15:08 2020
run_pending Sat Nov 21 17:16:08 2020
run_pending Sat Nov 21 17:17:08 2020
run_pending Sat Nov 21 17:18:08 2020
run_pending Sat Nov 21 17:19:08 2020
run_pending Sat Nov 21 17:20:08 2020
run_pending Sat Nov 21 17:21:08 2020
run_pending Sat Nov 21 17:22:08 2020
run_pending Sat Nov 21 17:23:08 2020
run_pending Sat Nov 21 17:24:08 2020
run_pending Sat Nov 21 17:25:08 2020
run_pending Sat Nov 21 17:26:08 2020
run_pending Sat Nov 21 17:27:08 2020
run_pending Sat Nov 21 17:28:08 2020
run_pending Sat Nov 21 17:29:08 2020
run_pending Sat Nov 21 17:30:08 2020
run_pending Sat Nov 21 17:31:08 2020
run_pending Sat Nov 21 17:32:08 2020
run_pending Sat Nov 21 17:34:08 2020
run_pending Sat Nov 21 17:35:08 2020
run_pending Sat Nov 21 17:36:08 2020
run_pending Sat Nov 21 17:37:08 2020
run_pending Sat Nov 21 17:38:09 2020
run_pending Sat Nov 21 17:39:09 2020
run_pending Sat Nov 21 17:40:09 2020
run_pending Sat Nov 21 17:41:09 2020
run_pending Sat Nov 21 17:42:09 2020
run_pending Sat Nov 21 17:43:09 2020
run_pending Sat Nov 21 17:44:09 2020
run_pending Sat Nov 21 17:45:09 2020
run_pending Sat Nov 21 17:46:09 2020
run_pending Sat Nov 21 17:47:09 2020
run_pending Sat Nov 21 17:48:09 2020
run_pending Sat Nov 21 17:49:09 2020
run_pending Sat Nov 21 17:50:09 2020
run_pending Sat Nov 21 17:51:09 2020
run_pending Sat Nov 21 17:52:09 2020
run_pending Sat Nov 21 17:53:09 2020
run_pending Sat Nov 21 17:54:09 2020
run_pending Sat Nov 21 17:55:09 2020
run_pending Sat Nov 21 17:56:09 2020
run_pending Sat Nov 21 17:57:09 2020
run_pending Sat Nov 21 17:58:09 2020
run_pending Sat Nov 21 17:59:09 2020
run_pending Sat Nov 21 18:00:09 2020
job Sat Nov 21 18:00:09 2020
run_pending Sat Nov 21 18:02:50 2020
run_pending Sat Nov 21 18:03:50 2020
run_pending Sat Nov 21 18:04:50 2020
run_pending Sat Nov 21 18:05:50 2020
run_pending Sat Nov 21 18:06:50 2020
killed

In this example there is always 60 seconds of sleep-time between execution of run_pending. Because run_pending itself takes a tiny bit of time to execute, over a long period of time, the second at which run_pending is executed drifts. In the beginning we observe that run_pending is executed at the 16th second, later at the 18th second.

Using at(':00'), the job is scheduled to run at the first minute of the hour. Jobs run when run_pending is called. Therefore the job sometimes runs at the 1th second of the first minute of the hour (15:00:01), and sometimes at the 18th second (14:00:18).

We can conclude it is possible to schedule jobs at whole hours using the .at(':00') syntax.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants