On 07/05/2017 09:56 AM, pozz wrote: > It seems it works, but I'm not sure it is the correct way to share the > variable self.cnt. It is only written in the long thread and only read > in the main thread. > Could a single Python instruction be interrupted (in this case, self.cnt > = i)? Should I use a locking mechanism when reading/writing? > > What about if the variable is more complex, for example a list or > dictionary? Even in this case, is it safe to avoid locking on a shared > variable if the operation on the variable is performed in a single > Python instruction?
I think it would be clearer if you used a queue. Here's an example of simplified version showing how the communication might work: test.py --------------------------- from threading import Thread from queue import Queue from time import sleep def main(): q = Queue() t = Thread(target=worker, args=(q,)) t.start() while True: status = q.get() if status < 0: break print(status) t.join() def worker(q, limit=5): for i in range(limit): sleep(1) # Simulate some work q.put(i) q.put(-1) # Some sort of value to indicate being finished main() -------------------------------- $ python3 test.py 0 1 2 3 4 Not sure if this helps, but I personally find it clearer than the shared class variable method you're using. Cheers, Thomas -- https://mail.python.org/mailman/listinfo/python-list