[Tutor] While Loop and Threads

James Chapman james at uplinkzero.com
Mon Jul 14 20:24:22 CEST 2014


OK, so I mocked up an example now...



import time
import threading

g_threadStop = threading.Event()

def threadWorker(_arg1, _arg2):
    print("Starting worker thread with args: %s, %s" % (_arg1, _arg2))
    while(not g_threadStop.is_set()):
        print("Thread running.")
        time.sleep(1)
    print("Thread exiting...")

def main():
    t = threading.Thread(target=threadWorker, args = ("arg1", "arg2"))
    t.start()
    print("Main thread sleeping for 10 seconds...")
    time.sleep(5)
    print("Main thread setting g_threadStop")
    g_threadStop.set()
    time.sleep(3)
    print("Main thread exiting...")

if __name__ == '__main__':
    main()





--
James


On 14 July 2014 19:03, James Chapman <james at uplinkzero.com> wrote:

> Multi-threading takes practice!
>
> Are you using an event object to signal the thread should exit? I'm
> guessing you're just using a bool which is why it does not work.
>
> See: https://docs.python.org/3.4/library/threading.html#event-objects
>
> I'm very short on time and the moment and therefore can't mock up a
> working example. If I have time later/tomorrow and you haven't solved it or
> no one else has commented I'll try and put something together.
>
> IMO, move away from GTK until you get threading working as expected, then
> add the additional layer. Solve one problem at a time.
>
> James
>
> --
> James
>
>
> On 13 July 2014 12:23, Oğuzhan Öğreden <oguzhanogreden at gmail.com> wrote:
>
>> Hi,
>>
>> I've been practicing with multithreading and gtk for a while and recently
>> have observed something I can't quite grasp.
>>
>> This is basically a timer with a settings window and a countdown window
>> which is produced after setting_window passes necessary arguments to thread.
>>
>> I have a while loop which counts time, inside the thread, while variable
>> "runner" is True, which looks like this:
>>
>>     def run(self):
>>         cycle = ['work', 'break', 'long_break']
>>         cycle = cycle[:2]*self.workn+cycle[3]
>>         self.runner = True
>>         sec_count = timedelta(seconds=1)
>>
>>         while self.runner == True:
>>             for i in cycle:
>>                 self.setState(i)
>>                 print('Start:', i, datetime.now())
>>
>>                 while self.end_time > datetime.now():
>>                     time.sleep(1)
>>                     self.duration -= sec_count
>>
>>                 self.count[self.state] += 1
>>
>> And I want countdown to stop when countdown_window receives delete event,
>> thus I have a countdown_window.stop() function which is defined as follows:
>>
>> def stop(self, *args):
>>         pom.count[pom.state] -= 1
>>         pom.runner = False # refers to the runner of the thread.
>>         print(pom.runner) # prints False,
>>         Gtk.main_quit()
>>
>> What I expect to happen is that while loop to break, but it does not.
>>
>> Any suggestions?
>>
>> Best,
>> Oğuzhan
>>
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> To unsubscribe or change subscription options:
>> https://mail.python.org/mailman/listinfo/tutor
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140714/20a2a2fc/attachment.html>


More information about the Tutor mailing list