collect data using threads
Kent Johnson
kent37 at tds.net
Tue Jun 14 10:53:20 EDT 2005
Peter Hansen wrote:
> Qiangning Hong wrote:
>
>> A class Collector, it spawns several threads to read from serial port.
>> Collector.get_data() will get all the data they have read since last
>> call. Who can tell me whether my implementation correct?
>
> [snip sample with a list]
>
>> I am not very sure about the get_data() method. Will it cause data lose
>> if there is a thread is appending data to self.data at the same time?
>
>
> That will not work, and you will get data loss, as Jeremy points out.
>
> Normally Python lists are safe, but your key problem (in this code) is
> that you are rebinding self.data to a new list! If another thread calls
> on_received() just after the line "x = self.data" executes, then the new
> data will never be seen.
Can you explain why not? self.data is still bound to the same list as x. At least if the execution sequence is
x = self.data
self.data.append(a_piece_of_data)
self.data = []
ISTM it should work.
I'm not arguing in favor of the original code, I'm just trying to understand your specific failure mode.
Thanks,
Kent
More information about the Python-list
mailing list