mirror of
https://github.com/YunoHost/yunorunner.git
synced 2024-09-03 20:05:52 +02:00
[mod] avoid infinite loop to prevent memleaks
This commit is contained in:
parent
7835ea8b47
commit
ed6d7cf1c7
1 changed files with 24 additions and 25 deletions
49
run.py
49
run.py
|
@ -343,42 +343,41 @@ async def launch_monthly_job(type):
|
||||||
await create_job(repo.name, repo.app_list, repo, job_command_last_part)
|
await create_job(repo.name, repo.app_list, repo, job_command_last_part)
|
||||||
|
|
||||||
|
|
||||||
|
@always_relaunch(sleep=3)
|
||||||
async def jobs_dispatcher():
|
async def jobs_dispatcher():
|
||||||
if Worker.select().count() == 0:
|
if Worker.select().count() == 0:
|
||||||
for i in range(1):
|
for i in range(1):
|
||||||
Worker.create(state="available")
|
Worker.create(state="available")
|
||||||
|
|
||||||
while True:
|
workers = Worker.select().where(Worker.state == "available")
|
||||||
workers = Worker.select().where(Worker.state == "available")
|
|
||||||
|
|
||||||
# no available workers, wait
|
# no available workers, wait
|
||||||
if workers.count() == 0:
|
if workers.count() == 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
with db.atomic('IMMEDIATE'):
|
||||||
|
jobs = Job.select().where(Job.state == "scheduled")
|
||||||
|
|
||||||
|
# no jobs to process, wait
|
||||||
|
if jobs.count() == 0:
|
||||||
await asyncio.sleep(3)
|
await asyncio.sleep(3)
|
||||||
continue
|
return
|
||||||
|
|
||||||
with db.atomic('IMMEDIATE'):
|
for i in range(min(workers.count(), jobs.count())):
|
||||||
jobs = Job.select().where(Job.state == "scheduled")
|
job = jobs[i]
|
||||||
|
worker = workers[i]
|
||||||
|
|
||||||
# no jobs to process, wait
|
job.state = "running"
|
||||||
if jobs.count() == 0:
|
job.started_time = datetime.now()
|
||||||
await asyncio.sleep(3)
|
job.save()
|
||||||
continue
|
|
||||||
|
|
||||||
for i in range(min(workers.count(), jobs.count())):
|
worker.state = "busy"
|
||||||
job = jobs[i]
|
worker.save()
|
||||||
worker = workers[i]
|
|
||||||
|
|
||||||
job.state = "running"
|
jobs_in_memory_state[job.id] = {
|
||||||
job.started_time = datetime.now()
|
"worker": worker.id,
|
||||||
job.save()
|
"task": asyncio.ensure_future(run_job(worker, job)),
|
||||||
|
}
|
||||||
worker.state = "busy"
|
|
||||||
worker.save()
|
|
||||||
|
|
||||||
jobs_in_memory_state[job.id] = {
|
|
||||||
"worker": worker.id,
|
|
||||||
"task": asyncio.ensure_future(run_job(worker, job)),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def run_job(worker, job):
|
async def run_job(worker, job):
|
||||||
|
|
Loading…
Add table
Reference in a new issue