Updated ticker_gtk.py

This commit is contained in:
2018-05-24 21:48:04 +02:00
parent f528b2cbab
commit 8fa5db1da1
2 changed files with 60 additions and 38 deletions
+59 -37
View File
@@ -25,22 +25,18 @@ gobject.threads_init()
class Listener(gobject.GObject): class Listener(gobject.GObject):
__gsignals__ = { __gsignals__ = {
'ticker_update' : (gobject.SIGNAL_RUN_LAST, 'handlers_update' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE,
(gobject.TYPE_FLOAT,
gobject.TYPE_FLOAT,
gobject.TYPE_FLOAT)),
'ticker_finished' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE, gobject.TYPE_NONE,
()), (gobject.TYPE_FLOAT,
gobject.TYPE_FLOAT,
gobject.TYPE_FLOAT)),
'handlers_finished' : (gobject.SIGNAL_RUN_LAST, 'handlers_finished' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE, gobject.TYPE_NONE,
()), ()),
'workers_update' : (gobject.SIGNAL_RUN_LAST, 'workers_update' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE, gobject.TYPE_NONE,
(gobject.TYPE_FLOAT, (gobject.TYPE_STRING,
gobject.TYPE_FLOAT, gobject.TYPE_PYOBJECT)),
gobject.TYPE_FLOAT)),
'workers_finished' : (gobject.SIGNAL_RUN_LAST, 'workers_finished' : (gobject.SIGNAL_RUN_LAST,
gobject.TYPE_NONE, gobject.TYPE_NONE,
()) ())
@@ -61,13 +57,13 @@ class Listener(gobject.GObject):
print("Ticker is finishing.") print("Ticker is finishing.")
self.emit("ticker_finished", data[0]) self.emit("ticker_finished", data[0])
return return
elif data[0]=="ticker_update": elif data[0]=="handler_update":
print("Ticker is working.") print("Handlers are working.")
self.emit("update_ticker") self.emit("handlers_update")
return return
elif data[0]=="work_update": elif data[0]=="work_update":
print("Workers are working.") print("Workers are working.")
self.emit("update_workers", data[0], data[1], data[2]) self.emit("workers_update", data[1])
return return
else: else:
self.emit('update_ticker', data[0], data[1], data[2]) self.emit('update_ticker', data[0], data[1], data[2])
@@ -75,25 +71,36 @@ class Listener(gobject.GObject):
gobject.type_register(Listener) gobject.type_register(Listener)
class Worker(): class Worker():
def __init__(self, sq, wq, i): def __init__(self, l, sq, wq, i):
self.lock = l
self.signal_queue = sq self.signal_queue = sq
self.work_queue = wq self.work_queue = wq
self.iterations = i self.iterations = i
self.fractions = []
def go(self): def go(self):
while True: while True:
print("Working")
task = self.work_queue.get(2) task = self.work_queue.get(2)
lock = multiprocessing.Lock().acquire() self.fractions.append(task)
tasks = self.work_queue.qsize() print(task)
lock.release() self.lock.acquire()
try:
tasks = self.work_queue.qsize()
self.fractions.append(tasks)
print(tasks)
finally:
self.lock.release()
with self.iterations.get_lock(): with self.iterations.get_lock():
if task is None: if task is None:
break break
self.iterations.value += 1 self.iterations.value += 1
tasks = tasks/1000 self.fractions.append(self.iterations.value)
print(self.iterations.value)
#tasks = tasks/1000
time.sleep(0.001) time.sleep(0.001)
self.work_queue.task_done() self.work_queue.task_done()
self.signal_queue.put("work_update", tasks, self.iterations) self.signal_queue.put("work_update", self.fractions)
self.work_queue.task_done() self.work_queue.task_done()
self.signal_queue.put("work_finished") self.signal_queue.put("work_finished")
@@ -105,11 +112,15 @@ class Handler():
self.iterations = i self.iterations = i
def go(self): def go(self):
while self.ticker_queue.empty() is not True: while True:
ticker = self.ticker_queue.get(0.1) if self.ticker_queue.empty() is not True:
self.work_queue.put(ticker-1000) ticker = self.ticker_queue.get(0.1)
time.sleep(0.01) self.work_queue.put(ticker-1000)
self.ticker_queue.task_done() time.sleep(0.01)
self.ticker_queue.task_done()
self.ticker_queue.task_done()
self.signal_queue.put("")
#def looprun(n): #def looprun(n):
#for i in tickers: #for i in tickers:
@@ -156,7 +167,7 @@ class ticker:
self.work_current_count = 0 self.work_current_count = 0
self.work_processed_count = 0 self.work_processed_count = 0
self.ticker_num = globvar.ticker_num self.ticker_num = globvar.ticker_num
self.fraction = 0 self.fraction = 1/1000
self.process = None self.process = None
self.signal_queue = multiprocessing.JoinableQueue() self.signal_queue = multiprocessing.JoinableQueue()
self.ticker_queue = multiprocessing.JoinableQueue() self.ticker_queue = multiprocessing.JoinableQueue()
@@ -166,6 +177,7 @@ class ticker:
self.work_num = 0 self.work_num = 0
self.processes = [] self.processes = []
self.threads = [] self.threads = []
self.lock = multiprocessing.Lock()
self.app = Gtk.Application.new("org.ticker", Gio.ApplicationFlags(0)) self.app = Gtk.Application.new("org.ticker", Gio.ApplicationFlags(0))
self.app.connect("activate", self.on_app_activate) self.app.connect("activate", self.on_app_activate)
self.app.connect("shutdown", self.on_app_shutdown) self.app.connect("shutdown", self.on_app_shutdown)
@@ -180,7 +192,7 @@ class ticker:
self.obj = builder.get_object self.obj = builder.get_object
self.obj("window").set_application(app) self.obj("window").set_application(app)
self.obj("window").set_wmclass("ticker","ticker") self.obj("window").set_wmclass("ticker","ticker")
self.obj("window").set_title("ticker - v.0.0.1") self.obj("window").set_title("ticker - v.0.1.15")
self.obj("window").show_all() self.obj("window").show_all()
self.obj("ticker_put_count_label").set_text(str(self.ticker_put_count)) self.obj("ticker_put_count_label").set_text(str(self.ticker_put_count))
self.obj("ticker_items_count_label").set_text(str(self.ticker_current_count)) self.obj("ticker_items_count_label").set_text(str(self.ticker_current_count))
@@ -206,15 +218,15 @@ class ticker:
self.obj("ticker_processed_count_label").set_text(index3) self.obj("ticker_processed_count_label").set_text(index3)
self.obj("ticker_processed_progressbar").set_fraction(self.val_3) self.obj("ticker_processed_progressbar").set_fraction(self.val_3)
def update_work(self, obj, index1, index2, index3, data=None): def update_work(self, obj, index):
self.val_1 = index1*self.fraction self.val_1 = index[0]*self.fraction
self.val_2 = index2*self.fraction self.val_2 = index[1]*self.fraction
self.val_3 = index3*self.fraction self.val_3 = index[2]*self.fraction
self.obj("work_put_count_label").set_text(index1) self.obj("work_put_count_label").set_text(index[0])
self.obj("work_put_progressbar").set_fraction(self.val_1) self.obj("work_put_progressbar").set_fraction(self.val_1)
self.obj("work_items_count_label").set_text(index2) self.obj("work_items_count_label").set_text(index[1])
self.obj("work_items_progressbar").set_fraction(self.val_2) self.obj("work_items_progressbar").set_fraction(self.val_2)
self.obj("work_processed_count_label").set_text(index3) self.obj("work_processed_count_label").set_text(index[2])
self.obj("work_processed_progressbar").set_fraction(self.val_3) self.obj("work_processed_progressbar").set_fraction(self.val_3)
def ticker_Finished(self, obj, data=None): def ticker_Finished(self, obj, data=None):
@@ -251,8 +263,8 @@ class ticker:
def on_execute_clicked(self,widget): def on_execute_clicked(self,widget):
print("Creating Listener") print("Creating Listener")
listener = Listener(self.signal_queue) listener = Listener(self.signal_queue)
listener.connect("ticker_update",self.update_ticker) listener.connect("handlers_update",self.update_ticker)
listener.connect("ticker_finished",self.ticker_Finished) listener.connect("handlers_finished",self.ticker_Finished)
listener.connect("workers_update",self.update_work) listener.connect("workers_update",self.update_work)
listener.connect("workers_finished",self.workers_Finished) listener.connect("workers_finished",self.workers_Finished)
@@ -260,11 +272,21 @@ class ticker:
thread = threading.Thread(target=listener.go, args=()) thread = threading.Thread(target=listener.go, args=())
thread.start() thread.start()
print("Creating ticker queue")
for i in self.tickers: for i in self.tickers:
self.ticker_queue.put(i) self.ticker_queue.put(i)
print(self.ticker_queue.qsize())
for i in range(20):
h = Handler(self.signal_queue, self.ticker_queue, self.work_queue, self.iterations)
t = threading.Thread(target = h.go, args = ())
t.deamon = True
t.start()
self.threads.append(t)
for i in range(8): for i in range(8):
p = multiprocessing.Process(target = Worker.go, args = (self.work_queue, self.iterations, )) w = Worker(self.lock, self.signal_queue, self.work_queue, self.iterations)
p = multiprocessing.Process(target = w.go, args=())
p.deamon = True p.deamon = True
p.start() p.start()
self.processes.append(p) self.processes.append(p)
+1 -1
View File
@@ -59,7 +59,7 @@ def looprun(n):
return return
if __name__=='__main__: if __name__=='__main__:
for n in range(100): for n in range(100):
looprun(n+1) looprun(n+1)