import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk import time from multiprocessing import Process, Value, Lock, Pool class Counter(object): def __init__(self, initval=0.0): self.val = Value('d', initval) self.lock = Lock() def increment(self): with self.lock: self.val.value += 1/2542 print(self.val.value) def value(self): with self.lock: return self.val.value class MyWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title = 'Hello World') #self.val = 0 self.box = Gtk.Box(spacing=6) self.add(self.box) self.button1 = Gtk.Button(label = 'Hello') self.button1.connect('clicked', self.on_button1_clicked) self.box.pack_start(self.button1, True, True, 0) self.button2 = Gtk.Button(label = 'Goodbye') self.button2.connect('clicked', self.on_button2_clicked) self.box.pack_start(self.button2, True, True, 0) self.pbar = Gtk.ProgressBar() self.pbar.set_fraction(0.0) self.box.pack_start(self.pbar, True, True, 0) def on_button1_clicked(self, widget): print('Hello') #procs = [Process(target=self.func, args=(counter,)) for i in range(10)] #for p in procs: p.start() #for p in procs: p.join() p = Pool(2) p.map(self.func, range(2542)) print (counter.value()) #while counter.val.value <10: #self.update_pbar(self.pbar) print('Goodbye') Gtk.main_quit() def on_button2_clicked(self, widget): print('Goodbye') Gtk.main_quit() def update_pbar(self, widget, value): #self.val += 0.1 self.pbar.set_fraction(value) #time.sleep(0.5) while Gtk.events_pending(): Gtk.main_iteration() def func(self, data): #for i in range(2542): time.sleep(0.01) counter.increment() #while counter.value() <1: #self.update_pbar(self.pbar, counter.value()) counter = Counter(0.0) win = MyWindow() win.connect('delete-event', Gtk.main_quit) win.show_all() Gtk.main()