How to use two threads (GUI and backend)
pozz
pozzugno at gmail.com
Wed Oct 26 08:34:58 EDT 2016
More information about the Python-list mailing list
Wed Oct 26 08:34:58 EDT 2016
- Previous message (by thread): How to use two threads (GUI and backend)
- Next message (by thread): How to use two threads (GUI and backend)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Il 26/10/2016 13:27, Antoon Pardon ha scritto: > Op 26-10-16 om 12:22 schreef pozz: >> Il 26/10/2016 09:13, pozz ha scritto: >>> [...] >>> When the user press Start button (the pressed handler is in the GUI >>> class): >>> >>> self.comm_active = True >>> threading.Thread(target=self.comm_thread).start() >>> >>> The backend thread is: >>> >>> def comm_thread(self): >>> while self.comm_active: >>> self.device.get_status() >>> GLib.idle_add(self.polling_received) >>> time.sleep(1) >>> self.m.close() >>> [...] >> >> Now I have some concerns even in using self.comm_active. It is a boolean variable >> accessed by the GUI thread (inside Start/Stop buttons handler) and backend thread >> (in the "while self.comm_active" instruction). > >> Is it safe to access this variable from two different threads? >> Should I implement a safer and more complex mechanism? If yes, what mechanism? > > Accessing from multiple thread shouldn't be a problem. As long as you only change > it in one thread. I don't want to doubt what you have written, but... are you definitevely sure? I tried to search for some authoritative documentation about this topic, but I couldn't find any. I have many years of experiece in embedded firmware written in C for small microcontrollers, so I know the problems that could occur when a variable is read in one ISR (interrupt service routine) and written in the main loop (or viceversa). ISR and main loop can be considered two threads. If the variable is 32-bits and the microcontroller can't write atomically (without any interruption) a 32-bit variable, bad things could occur. If the main loop is updating the variable from 0x01020304 to 0xA1A2A3A4 and the change happens on a byte basis, the ISR could access a completely wrong value, for example 0x0102A3A4. So the main question here is: does python *specification/standard* guarantees atomic operations? If yes, what are they?
- Previous message (by thread): How to use two threads (GUI and backend)
- Next message (by thread): How to use two threads (GUI and backend)
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list