[mod] avoid infinite loop to prevent memleaks

This commit is contained in:
Laurent Peuch 2019-04-01 03:34:22 +02:00
parent 7835ea8b47
commit ed6d7cf1c7

49
run.py
View file

@ -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):