On Sat, Apr 29, 2017 at 06:26:28PM +0000, Marc Eymard wrote: > The way I have decided to go about implementing the sensor reading is by > creating a Thread object and update the distance attribute of this very > same object from the run() function. The idea is to encapsulate the > distance reading within the sensor object as much as possible by i. > creating a sensor/thread object and by ii. avoiding global variables.
That's not a bad approach, but I'd take it one step further: move all the logic into another object, and just have the thread call it. That lets you change your mind later, and replace threads with an external process, or async code, or whatever technology is best. It also allows you to add whatever smarts or features you need into the object collecting values, without the thread needing to care about it. Something like this untested code: from threading import Thread class Collector(object): # Object to collect readings. def __init__(self): self.values = [] def store(self, value): # If you need any data validation or other processing, # put it here. self.values.append(value) def run(self): print("Starting collecting...") while True: value = ... # collect the data somehow if value == -1: # No more data? break self.store(value) print("...finished collecting.") def report(self): print("I have %d values" % len(self.values)) Now, you can have your main function create a Collector, pass it to the thread, and process it as needed: def main(): c = Collector() t = Thread(target=c.run, name='my thread') t.start() t.join() c.report() > Attached the script I have come up with Alas, this mailing list doesn't accept attachments. You should reduce the script to the smallest amount of code you can, and re-post it, together with the entire stack trace of the errors. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor