Rafael Uzarowski commited on
Commit
82ef7e9
·
unverified ·
1 Parent(s): a917ae6

fix: synchronize job loop with development instance

Browse files
Files changed (1) hide show
  1. python/helpers/job_loop.py +39 -6
python/helpers/job_loop.py CHANGED
@@ -1,20 +1,53 @@
1
  import asyncio
 
 
2
  from python.helpers.task_scheduler import TaskScheduler
3
  from python.helpers.print_style import PrintStyle
4
  from python.helpers import errors
 
 
 
 
 
 
 
5
 
6
 
7
  async def run_loop():
 
 
8
  while True:
9
- try:
10
- await scheduler_tick()
11
- except Exception as e:
12
- PrintStyle().error(errors.format_error(e))
13
- await asyncio.sleep(60) # TODO! - if we lower it under 1min, it can run a 5min job multiple times in it's target minute
 
 
 
 
 
 
 
 
 
 
14
 
15
 
16
  async def scheduler_tick():
17
  # Get the task scheduler instance and print detailed debug info
18
  scheduler = TaskScheduler.get()
19
  # Run the scheduler tick
20
- await scheduler.tick()
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import asyncio
2
+ from datetime import datetime
3
+ import time
4
  from python.helpers.task_scheduler import TaskScheduler
5
  from python.helpers.print_style import PrintStyle
6
  from python.helpers import errors
7
+ from python.helpers import runtime
8
+
9
+
10
+ SLEEP_TIME = 60
11
+
12
+ keep_running = True
13
+ pause_time = 0
14
 
15
 
16
  async def run_loop():
17
+ global pause_time, keep_running
18
+
19
  while True:
20
+ if runtime.is_development():
21
+ # Signal to container that the job loop should be paused
22
+ # if we are runing a development instance to avoid duble-running the jobs
23
+ try:
24
+ await runtime.call_development_function(pause_loop)
25
+ except Exception as e:
26
+ PrintStyle().error("Failed to pause job loop by development instance: " + errors.error_text(e))
27
+ if not keep_running and (time.time() - pause_time) > (SLEEP_TIME * 2):
28
+ resume_loop()
29
+ if keep_running:
30
+ try:
31
+ await scheduler_tick()
32
+ except Exception as e:
33
+ PrintStyle().error(errors.format_error(e))
34
+ await asyncio.sleep(SLEEP_TIME) # TODO! - if we lower it under 1min, it can run a 5min job multiple times in it's target minute
35
 
36
 
37
  async def scheduler_tick():
38
  # Get the task scheduler instance and print detailed debug info
39
  scheduler = TaskScheduler.get()
40
  # Run the scheduler tick
41
+ await scheduler.tick()
42
+
43
+
44
+ def pause_loop():
45
+ global keep_running, pause_time
46
+ keep_running = False
47
+ pause_time = time.time()
48
+
49
+
50
+ def resume_loop():
51
+ global keep_running, pause_time
52
+ keep_running = True
53
+ pause_time = 0