Update jobs on background thread

This commit is contained in:
Brett Williams
2023-06-02 12:10:49 -05:00
parent 23abbd836c
commit 4331d81a97
3 changed files with 44 additions and 33 deletions

View File

@@ -220,7 +220,7 @@ class ZordonClient:
while True:
self.update_jobs()
self.update_servers()
time.sleep(1)
time.sleep(3)
def update_servers(self):
servers = self.zeroconf.found_clients()
@@ -232,34 +232,43 @@ class ZordonClient:
def update_jobs(self, clear_table=False):
def update_row(tree, id, new_values, tags=None):
for item in tree.get_children():
values = tree.item(item, "values")
if values[0] == id:
tree.item(item, values=new_values, tags=tags)
break
job_fetch = self.server_proxy.get_jobs()
if job_fetch is not None:
if len(job_fetch) < len(self.job_cache) or len(job_fetch) == 0:
clear_table = True
self.job_cache = job_fetch # update the cache only if its good data
def update_jobs_inner():
def update_row(tree, id, new_values, tags=None):
for item in tree.get_children():
values = tree.item(item, "values")
if values[0] == id:
tree.item(item, values=new_values, tags=tags)
break
job_fetch = self.server_proxy.get_jobs()
if job_fetch is not None:
if len(job_fetch) < len(self.job_cache) or len(job_fetch) == 0:
self.job_tree.delete(*self.job_tree.get_children())
self.job_cache = job_fetch # update the cache only if its good data
for job in self.job_cache:
display_status = job['status'] if job['status'] != 'running' else \
('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status
tags = (job['status'],)
values = (job['id'],
job['name'] or os.path.basename(job['input_path']),
job['renderer'] + "-" + job['renderer_version'],
job['priority'],
display_status,
job['time_elapsed'],
job['total_frames'])
try:
if self.job_tree.exists(job['id']):
update_row(self.job_tree, job['id'], new_values=values, tags=tags)
else:
self.job_tree.insert("", tk.END, iid=job['id'], values=values, tags=tags)
except tk.TclError:
pass
if clear_table:
self.job_tree.delete(*self.job_tree.get_children())
for job in self.job_cache:
display_status = job['status'] if job['status'] != 'running' else \
('%.0f%%' % (job['percent_complete'] * 100)) # if running, show percentage, otherwise just show status
tags = (job['status'],)
values = (job['id'],
job['name'] or os.path.basename(job['input_path']),
job['renderer'] + "-" + job['renderer_version'],
job['priority'],
display_status,
job['time_elapsed'],
job['total_frames'])
if self.job_tree.exists(job['id']):
update_row(self.job_tree, job['id'], new_values=values, tags=tags)
else:
self.job_tree.insert("", tk.END, iid=job['id'], values=values, tags=tags)
x = threading.Thread(target=update_jobs_inner)
x.daemon = True
x.start()
def show_new_job_window(self):
new_window = tk.Toplevel(self.root)