dbader / dbader/schedule

Why did three separate python scripts using schedule start at different time eventually converged to be in sync?

Open
#614 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
12.3k
Forks
999
PR merge metrics
No merged PRs in 30d

Description

This is more of a question than bug report, but this phenomenon has been confusing me for years.

I guess a this is the appropriate place to ask about it.

So I have a script using `schedule` to check something periodically.
It roughly looks like this (pseudo code):

```python
import time
import sys

import schedule

def check(url):
# print current time
print(f"\nCurrent Time = {now_to_str()}")
# fetch and check `url` to see if it meets some conditions...
if not condition_met:
return
# do something...
return schedule.CancelJob
if __name__ == '__main__':

schedule.every(26).seconds.do(check, url=sys.argv[1])
# run it immediately once
schedule.run_all()

while schedule.jobs:
schedule.run_pending()
time.sleep(.1)
```

I will typically run three or four of such scripts in parallel (so different Python processes) on my machine. Because I do it manually, they usually start at different time, a few seconds apart.

What I've noticed that if I let the scripts run for a while, say 1 hour or 2, I find that **the current time they print at the start of each task eventually became the same.**

For example, I parsed the logs from three instances and print the difference between three logs:
```log
log1.txt: find 244 times
log2.txt: find 244 times
log3.txt: find 244 times
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━┓
┃ log1 ┃ log2 ┃ log3 ┃ diff 1 to 2 ┃ diff 2 to 3 ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
│ 2024-02-22 21:29:35 │ 2024-02-22 21:29:41 │ 2024-02-22 21:29:45 │ 6.0 │ 4.0 │
│ 2024-02-22 21:30:02 │ 2024-02-22 21:30:08 │ 2024-02-22 21:30:12 │ 6.0 │ 4.0 │
│ 2024-02-22 21:30:29 │ 2024-02-22 21:30:35 │ 2024-02-22 21:30:39 │ 6.0 │ 4.0 │
│ 2024-02-22 21:30:56 │ 2024-02-22 21:31:02 │ 2024-02-22 21:31:06 │ 6.0 │ 4.0 │
│ 2024-02-22 21:31:23 │ 2024-02-22 21:31:29 │ 2024-02-22 21:31:33 │ 6.0 │ 4.0 │
│ 2024-02-22 21:31:50 │ 2024-02-22 21:31:56 │ 2024-02-22 21:32:00 │ 6.0 │ 4.0 │
│ 2024-02-22 21:32:17 │ 2024-02-22 21:32:23 │ 2024-02-22 21:32:27 │ 6.0 │ 4.0 │
│ 2024-02-22 21:32:44 │ 2024-02-22 21:32:50 │ 2024-02-22 21:32:54 │ 6.0 │ 4.0 │
│ 2024-02-22 21:33:11 │ 2024-02-22 21:33:17 │ 2024-02-22 21:33:21 │ 6.0 │ 4.0 │
│ 2024-02-22 21:33:38 │ 2024-02-22 21:33:44 │ 2024-02-22 21:33:48 │ 6.0 │ 4.0 │
│ 2024-02-22 21:34:05 │ 2024-02-22 21:34:11 │ 2024-02-22 21:34:15 │ 6.0 │ 4.0 │
│ 2024-02-22 21:34:33 │ 2024-02-22 21:34:38 │ 2024-02-22 21:34:42 │ 5.0 │ 4.0 │
│ 2024-02-22 21:35:00 │ 2024-02-22 21:35:05 │ 2024-02-22 21:35:09 │ 5.0 │ 4.0 │
│ 2024-02-22 21:35:27 │ 2024-02-22 21:35:32 │ 2024-02-22 21:35:36 │ 5.0 │ 4.0 │
│ 2024-02-22 21:35:54 │ 2024-02-22 21:35:59 │ 2024-02-22 21:36:03 │ 5.0 │ 4.0 │
│ 2024-02-22 21:36:21 │ 2024-02-22 21:36:26 │ 2024-02-22 21:36:30 │ 5.0 │ 4.0 │
│ 2024-02-22 21:36:48 │ 2024-02-22 21:36:53 │ 2024-02-22 21:36:57 │ 5.0 │ 4.0 │
│ 2024-02-22 21:37:15 │ 2024-02-22 21:37:20 │ 2024-02-22 21:37:24 │ 5.0 │ 4.0 │
│ 2024-02-22 21:37:42 │ 2024-02-22 21:37:47 │ 2024-02-22 21:37:51 │ 5.0 │ 4.0 │
│ 2024-02-22 21:38:10 │ 2024-02-22 21:38:14 │ 2024-02-22 21:38:18 │ 4.0 │ 4.0 │
│ 2024-02-22 21:38:37 │ 2024-02-22 21:38:41 │ 2024-02-22 21:38:45 │ 4.0 │ 4.0 │
│ 2024-02-22 21:39:04 │ 2024-02-22 21:39:08 │ 2024-02-22 21:39:12 │ 4.0 │ 4.0 │
│ 2024-02-22 21:39:31 │ 2024-02-22 21:39:35 │ 2024-02-22 21:39:39 │ 4.0 │ 4.0 │
│ 2024-02-22 21:39:58 │ 2024-02-22 21:40:02 │ 2024-02-22 21:40:06 │ 4.0 │ 4.0 │
│ 2024-02-22 21:40:25 │ 2024-02-22 21:40:29 │ 2024-02-22 21:40:33 │ 4.0 │ 4.0 │
│ 2024-02-22 21:40:52 │ 2024-02-22 21:40:56 │ 2024-02-22 21:41:00 │ 4.0 │ 4.0 │
│ 2024-02-22 21:41:20 │ 2024-02-22 21:41:23 │ 2024-02-22 21:41:28 │ 3.0 │ 5.0 │
│ 2024-02-22 21:41:47 │ 2024-02-22 21:41:50 │ 2024-02-22 21:41:55 │ 3.0 │ 5.0 │
│ 2024-02-22 21:42:14 │ 2024-02-22 21:42:17 │ 2024-02-22 21:42:22 │ 3.0 │ 5.0 │
│ 2024-02-22 21:42:41 │ 2024-02-22 21:42:44 │ 2024-02-22 21:42:49 │ 3.0 │ 5.0 │
│ 2024-02-22 21:43:08 │ 2024-02-22 21:43:11 │ 2024-02-22 21:43:16 │ 3.0 │ 5.0 │
│ 2024-02-22 21:43:35 │ 2024-02-22 21:43:38 │ 2024-02-22 21:43:43 │ 3.0 │ 5.0 │
│ 2024-02-22 21:44:02 │ 2024-02-22 21:44:05 │ 2024-02-22 21:44:10 │ 3.0 │ 5.0 │
│ 2024-02-22 21:44:30 │ 2024-02-22 21:44:32 │ 2024-02-22 21:44:37 │ 2.0 │ 5.0 │
│ 2024-02-22 21:44:57 │ 2024-02-22 21:45:00 │ 2024-02-22 21:45:04 │ 3.0 │ 4.0 │
│ 2024-02-22 21:45:24 │ 2024-02-22 21:45:27 │ 2024-02-22 21:45:31 │ 3.0 │ 4.0 │
│ 2024-02-22 21:45:51 │ 2024-02-22 21:45:54 │ 2024-02-22 21:45:58 │ 3.0 │ 4.0 │
│ 2024-02-22 21:46:18 │ 2024-02-22 21:46:21 │ 2024-02-22 21:46:25 │ 3.0 │ 4.0 │
│ 2024-02-22 21:46:45 │ 2024-02-22 21:46:48 │ 2024-02-22 21:46:53 │ 3.0 │ 5.0 │
│ 2024-02-22 21:47:12 │ 2024-02-22 21:47:15 │ 2024-02-22 21:47:19 │ 3.0 │ 4.0 │
│ 2024-02-22 21:47:39 │ 2024-02-22 21:47:42 │ 2024-02-22 21:47:46 │ 3.0 │ 4.0 │
│ 2024-02-22 21:48:06 │ 2024-02-22 21:48:09 │ 2024-02-22 21:48:13 │ 3.0 │ 4.0 │
│ 2024-02-22 21:48:33 │ 2024-02-22 21:48:36 │ 2024-02-22 21:48:40 │ 3.0 │ 4.0 │
│ 2024-02-22 21:49:00 │ 2024-02-22 21:49:03 │ 2024-02-22 21:49:07 │ 3.0 │ 4.0 │
│ 2024-02-22 21:49:27 │ 2024-02-22 21:49:30 │ 2024-02-22 21:49:34 │ 3.0 │ 4.0 │
│ 2024-02-22 21:49:54 │ 2024-02-22 21:49:57 │ 2024-02-22 21:50:01 │ 3.0 │ 4.0 │
│ 2024-02-22 21:50:22 │ 2024-02-22 21:50:24 │ 2024-02-22 21:50:28 │ 2.0 │ 4.0 │
│ 2024-02-22 21:50:49 │ 2024-02-22 21:50:51 │ 2024-02-22 21:50:55 │ 2.0 │ 4.0 │
│ 2024-02-22 21:51:16 │ 2024-02-22 21:51:18 │ 2024-02-22 21:51:22 │ 2.0 │ 4.0 │
│ 2024-02-22 21:51:43 │ 2024-02-22 21:51:45 │ 2024-02-22 21:51:49 │ 2.0 │ 4.0 │
│ 2024-02-22 21:52:10 │ 2024-02-22 21:52:12 │ 2024-02-22 21:52:16 │ 2.0 │ 4.0 │
│ 2024-02-22 21:52:37 │ 2024-02-22 21:52:39 │ 2024-02-22 21:52:43 │ 2.0 │ 4.0 │
│ 2024-02-22 21:53:04 │ 2024-02-22 21:53:06 │ 2024-02-22 21:53:10 │ 2.0 │ 4.0 │
│ 2024-02-22 21:53:31 │ 2024-02-22 21:53:33 │ 2024-02-22 21:53:37 │ 2.0 │ 4.0 │
│ 2024-02-22 21:53:58 │ 2024-02-22 21:54:00 │ 2024-02-22 21:54:04 │ 2.0 │ 4.0 │
│ 2024-02-22 21:54:26 │ 2024-02-22 21:54:27 │ 2024-02-22 21:54:31 │ 1.0 │ 4.0 │
│ 2024-02-22 21:54:53 │ 2024-02-22 21:54:54 │ 2024-02-22 21:54:58 │ 1.0 │ 4.0 │
│ 2024-02-22 21:55:20 │ 2024-02-22 21:55:21 │ 2024-02-22 21:55:26 │ 1.0 │ 5.0 │
│ 2024-02-22 21:55:47 │ 2024-02-22 21:55:48 │ 2024-02-22 21:55:53 │ 1.0 │ 5.0 │
│ 2024-02-22 21:56:14 │ 2024-02-22 21:56:15 │ 2024-02-22 21:56:20 │ 1.0 │ 5.0 │
│ 2024-02-22 21:56:41 │ 2024-02-22 21:56:42 │ 2024-02-22 21:56:47 │ 1.0 │ 5.0 │
│ 2024-02-22 21:57:08 │ 2024-02-22 21:57:09 │ 2024-02-22 21:57:14 │ 1.0 │ 5.0 │
│ 2024-02-22 21:57:35 │ 2024-02-22 21:57:36 │ 2024-02-22 21:57:41 │ 1.0 │ 5.0 │
│ 2024-02-22 21:58:02 │ 2024-02-22 21:58:03 │ 2024-02-22 21:58:08 │ 1.0 │ 5.0 │
│ 2024-02-22 21:58:29 │ 2024-02-22 21:58:30 │ 2024-02-22 21:58:35 │ 1.0 │ 5.0 │
│ 2024-02-22 21:58:56 │ 2024-02-22 21:58:57 │ 2024-02-22 21:59:02 │ 1.0 │ 5.0 │
│ 2024-02-22 21:59:24 │ 2024-02-22 21:59:24 │ 2024-02-22 21:59:29 │ 0.0 │ 5.0 │
│ 2024-02-22 21:59:51 │ 2024-02-22 21:59:51 │ 2024-02-22 21:59:56 │ 0.0 │ 5.0 │
│ 2024-02-22 22:00:18 │ 2024-02-22 22:00:18 │ 2024-02-22 22:00:23 │ 0.0 │ 5.0 │
│ 2024-02-22 22:00:45 │ 2024-02-22 22:00:45 │ 2024-02-22 22:00:50 │ 0.0 │ 5.0 │
│ 2024-02-22 22:01:12 │ 2024-02-22 22:01:12 │ 2024-02-22 22:01:17 │ 0.0 │ 5.0 │
│ 2024-02-22 22:01:40 │ 2024-02-22 22:01:40 │ 2024-02-22 22:01:44 │ 0.0 │ 4.0 │
│ 2024-02-22 22:02:07 │ 2024-02-22 22:02:07 │ 2024-02-22 22:02:11 │ 0.0 │ 4.0 │
│ 2024-02-22 22:02:34 │ 2024-02-22 22:02:34 │ 2024-02-22 22:02:38 │ 0.0 │ 4.0 │
│ 2024-02-22 22:03:01 │ 2024-02-22 22:03:01 │ 2024-02-22 22:03:05 │ 0.0 │ 4.0 │
│ 2024-02-22 22:03:28 │ 2024-02-22 22:03:28 │ 2024-02-22 22:03:32 │ 0.0 │ 4.0 │
│ 2024-02-22 22:03:55 │ 2024-02-22 22:03:55 │ 2024-02-22 22:04:00 │ 0.0 │ 5.0 │
│ 2024-02-22 22:04:22 │ 2024-02-22 22:04:22 │ 2024-02-22 22:04:27 │ 0.0 │ 5.0 │
│ 2024-02-22 22:04:49 │ 2024-02-22 22:04:49 │ 2024-02-22 22:04:54 │ 0.0 │ 5.0 │
│ 2024-02-22 22:05:16 │ 2024-02-22 22:05:16 │ 2024-02-22 22:05:21 │ 0.0 │ 5.0 │
│ 2024-02-22 22:05:43 │ 2024-02-22 22:05:43 │ 2024-02-22 22:05:48 │ 0.0 │ 5.0 │
│ 2024-02-22 22:06:10 │ 2024-02-22 22:06:10 │ 2024-02-22 22:06:15 │ 0.0 │ 5.0 │
│ 2024-02-22 22:06:38 │ 2024-02-22 22:06:38 │ 2024-02-22 22:06:41 │ 0.0 │ 3.0 │
│ 2024-02-22 22:07:05 │ 2024-02-22 22:07:05 │ 2024-02-22 22:07:08 │ 0.0 │ 3.0 │
│ 2024-02-22 22:07:32 │ 2024-02-22 22:07:32 │ 2024-02-22 22:07:35 │ 0.0 │ 3.0 │
│ 2024-02-22 22:07:59 │ 2024-02-22 22:07:59 │ 2024-02-22 22:08:02 │ 0.0 │ 3.0 │
│ 2024-02-22 22:08:26 │ 2024-02-22 22:08:26 │ 2024-02-22 22:08:29 │ 0.0 │ 3.0 │
│ 2024-02-22 22:08:54 │ 2024-02-22 22:08:53 │ 2024-02-22 22:08:56 │ -1.0 │ 3.0 │
│ 2024-02-22 22:09:21 │ 2024-02-22 22:09:20 │ 2024-02-22 22:09:23 │ -1.0 │ 3.0 │
│ 2024-02-22 22:09:48 │ 2024-02-22 22:09:48 │ 2024-02-22 22:09:50 │ 0.0 │ 2.0 │
│ 2024-02-22 22:10:15 │ 2024-02-22 22:10:15 │ 2024-02-22 22:10:17 │ 0.0 │ 2.0 │
│ 2024-02-22 22:10:42 │ 2024-02-22 22:10:42 │ 2024-02-22 22:10:44 │ 0.0 │ 2.0 │
│ 2024-02-22 22:11:09 │ 2024-02-22 22:11:09 │ 2024-02-22 22:11:11 │ 0.0 │ 2.0 │
│ 2024-02-22 22:11:36 │ 2024-02-22 22:11:36 │ 2024-02-22 22:11:38 │ 0.0 │ 2.0 │
│ 2024-02-22 22:12:03 │ 2024-02-22 22:12:03 │ 2024-02-22 22:12:05 │ 0.0 │ 2.0 │
│ 2024-02-22 22:12:30 │ 2024-02-22 22:12:30 │ 2024-02-22 22:12:32 │ 0.0 │ 2.0 │
│ 2024-02-22 22:12:58 │ 2024-02-22 22:12:58 │ 2024-02-22 22:12:59 │ 0.0 │ 1.0 │
│ 2024-02-22 22:13:25 │ 2024-02-22 22:13:25 │ 2024-02-22 22:13:26 │ 0.0 │ 1.0 │
│ 2024-02-22 22:13:52 │ 2024-02-22 22:13:52 │ 2024-02-22 22:13:53 │ 0.0 │ 1.0 │
│ 2024-02-22 22:14:19 │ 2024-02-22 22:14:19 │ 2024-02-22 22:14:20 │ 0.0 │ 1.0 │
│ 2024-02-22 22:14:46 │ 2024-02-22 22:14:46 │ 2024-02-22 22:14:47 │ 0.0 │ 1.0 │
│ 2024-02-22 22:15:13 │ 2024-02-22 22:15:13 │ 2024-02-22 22:15:14 │ 0.0 │ 1.0 │
│ 2024-02-22 22:15:40 │ 2024-02-22 22:15:40 │ 2024-02-22 22:15:41 │ 0.0 │ 1.0 │
│ 2024-02-22 22:16:08 │ 2024-02-22 22:16:07 │ 2024-02-22 22:16:08 │ -1.0 │ 1.0 │
│ 2024-02-22 22:16:35 │ 2024-02-22 22:16:35 │ 2024-02-22 22:16:35 │ 0.0 │ 0.0 │
│ 2024-02-22 22:17:02 │ 2024-02-22 22:17:02 │ 2024-02-22 22:17:02 │ 0.0 │ 0.0 │
│ 2024-02-22 22:17:29 │ 2024-02-22 22:17:29 │ 2024-02-22 22:17:29 │ 0.0 │ 0.0 │
│ 2024-02-22 22:17:56 │ 2024-02-22 22:17:56 │ 2024-02-22 22:17:56 │ 0.0 │ 0.0 │
│ 2024-02-22 22:18:23 │ 2024-02-22 22:18:23 │ 2024-02-22 22:18:23 │ 0.0 │ 0.0 │
│ 2024-02-22 22:18:50 │ 2024-02-22 22:18:50 │ 2024-02-22 22:18:50 │ 0.0 │ 0.0 │
│ 2024-02-22 22:19:18 │ 2024-02-22 22:19:17 │ 2024-02-22 22:19:17 │ -1.0 │ 0.0 │
│ 2024-02-22 22:19:45 │ 2024-02-22 22:19:45 │ 2024-02-22 22:19:45 │ 0.0 │ 0.0 │
│ 2024-02-22 22:20:12 │ 2024-02-22 22:20:12 │ 2024-02-22 22:20:12 │ 0.0 │ 0.0 │
│ 2024-02-22 22:20:39 │ 2024-02-22 22:20:39 │ 2024-02-22 22:20:39 │ 0.0 │ 0.0 │
│ 2024-02-22 22:21:06 │ 2024-02-22 22:21:06 │ 2024-02-22 22:21:06 │ 0.0 │ 0.0 │
│ 2024-02-22 22:21:33 │ 2024-02-22 22:21:33 │ 2024-02-22 22:21:33 │ 0.0 │ 0.0 │
│ 2024-02-22 22:22:00 │ 2024-02-22 22:22:00 │ 2024-02-22 22:22:00 │ 0.0 │ 0.0 │
│ 2024-02-22 22:22:27 │ 2024-02-22 22:22:28 │ 2024-02-22 22:22:27 │ 1.0 │ -1.0 │
│ 2024-02-22 22:22:54 │ 2024-02-22 22:22:55 │ 2024-02-22 22:22:54 │ 1.0 │ -1.0 │
│ 2024-02-22 22:23:21 │ 2024-02-22 22:23:22 │ 2024-02-22 22:23:21 │ 1.0 │ -1.0 │
│ 2024-02-22 22:23:48 │ 2024-02-22 22:23:49 │ 2024-02-22 22:23:48 │ 1.0 │ -1.0 │
│ 2024-02-22 22:24:15 │ 2024-02-22 22:24:16 │ 2024-02-22 22:24:15 │ 1.0 │ -1.0 │
│ 2024-02-22 22:24:43 │ 2024-02-22 22:24:43 │ 2024-02-22 22:24:43 │ 0.0 │ 0.0 │
│ 2024-02-22 22:25:10 │ 2024-02-22 22:25:10 │ 2024-02-22 22:25:10 │ 0.0 │ 0.0 │
│ 2024-02-22 22:25:37 │ 2024-02-22 22:25:37 │ 2024-02-22 22:25:37 │ 0.0 │ 0.0 │
│ 2024-02-22 22:26:04 │ 2024-02-22 22:26:04 │ 2024-02-22 22:26:04 │ 0.0 │ 0.0 │
..............
│ 2024-02-22 23:17:34 │ 2024-02-22 23:17:34 │ 2024-02-22 23:17:34 │ 0.0 │ 0.0 │
│ 2024-02-22 23:18:01 │ 2024-02-22 23:18:01 │ 2024-02-22 23:18:01 │ 0.0 │ 0.0 │
│ 2024-02-22 23:18:28 │ 2024-02-22 23:18:28 │ 2024-02-22 23:18:28 │ 0.0 │ 0.0 │
│ 2024-02-22 23:18:55 │ 2024-02-22 23:18:55 │ 2024-02-22 23:18:55 │ 0.0 │ 0.0 │
│ 2024-02-22 23:19:22 │ 2024-02-22 23:19:22 │ 2024-02-22 23:19:22 │ 0.0 │ 0.0 │
└─────────────────────┴─────────────────────┴─────────────────────┴─────────────┴─────────────┘
```

As you can see, at the beginning 2 is 6 seconds behind 1, and 3 is 4 seconds behind 2.
But after merely 1 hours, they become in sync. And they STAY in sync for the rest of the time.

I fully understand schedule isn't meant to have exact timing, so I never expect the interval to be consistent. But I don't understand why would three totally unrelated python processes would eventually converge together.

In the above script I only have timestamp in seconds in my log. But in fact, they are more in sync than that!

In the actual full script, part of the scheduled task is to call a external program (`subprocess.run`) when the condition is met, which creates a folder called `folder_{timestamp_in_ms}`. And it has happens to me once, that two different running scripts create the folder at *exactly same millisecond* due to this convergence.

I can't for the life of me figure it out. I hope someone can provide some insights. Thanks in advance.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reproducing the three-process example using schedule.every(26).seconds.do, schedule.run_all(), and schedule.run_pending(), then trace how each job's next execution time is set. Done means establishing whether the observed convergence is expected and documenting a maintainer-supported explanation or a reproducible defect.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.