Giter Club home page Giter Club logo

Comments (3)

NeoPolus avatar NeoPolus commented on July 20, 2024 2

Hi, this bug is due to Board.exit() never getting called automatically from Board.__del__() as long as there is a Iterator thread running.
This happens because the Iterator thread keeps a -circular- reference to the Board! So if you try to stop Python (keyboard interruption or any exception...) the main thread dies but Python does not call Board.__del__() yet and instead keeps waiting for the Iterator thread to stop... which never happens.
So, unless you manually call Board.exit() under any situation ("try:... finally: board.exit()") is highly probable that your Iterator will become a zombie.

I created a new pull request (#45) with some commits that fix this problem by implementing the support for the Python "with" statement, so you can do something like this:

>> from pyfirmata import Arduino, util
>> board = Arduino('/dev/tty...')
>> with board:
>>     board.analog[0].enable_reporting()
>>     board.analog[0].read()

and it will take care of creating the Iterator thread at the beginning of the with block and stopping it (automatically calling board.exit()) at the end of the block even when an exception happens. So it would be a shorter (and cooler ;) ) equivalent to:

>> from pyfirmata import Arduino, util
>> board = Arduino('/dev/tty...')
>> it = util.Iterator(board)
>> it.start()
>> try:
>>     board.analog[0].enable_reporting()
>>     board.analog[0].read()
>> finally:
>>     board.exit()
>>     it = None

I hope @tino likes the pull request and merges it soon :)

from pyfirmata.

tino avatar tino commented on July 20, 2024

Hi, I think I've experienced this as well before, but I am not really familiar with all ins and outs of threads. Could you make a pull request out of this?

from pyfirmata.

tino avatar tino commented on July 20, 2024

Fix with #44

from pyfirmata.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.