element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Raspberry Pi
  • Products
  • More
Raspberry Pi
Raspberry Pi Forum interrupts gives memory leak
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Raspberry Pi to participate - click to join for free!
Featured Articles
Announcing Pi
Technical Specifications
Raspberry Pi FAQs
Win a Pi
Raspberry Pi Wishlist
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Not Answered
  • Replies 7 replies
  • Subscribers 664 subscribers
  • Views 776 views
  • Users 0 members are here
  • memory
  • raspberry_pi
  • interrupts
  • leak
Related

interrupts gives memory leak

Former Member
Former Member over 11 years ago

Hi People,

 

I have a problem. This week I have installed my Raspberry and the PiFace. All software is the newest (install-date: 20-01-2014)

After installing, I tested it with: python3 /usr/share/doc/python3-pifacedigitalio/examples/blink.py

works fine.

 

When I test this script with Unix command: "top" to see the memory use, the %mem is stable.

 

When I start (from: /usr/share/doc/python3-pifacedigitalio/examples ):

 

python ./presslights.py &

or by

python3 ./presslights.py &


the memory use is rising. 

After 5 to 8 hours the scripts runs "out of memory".


The only difference with the blink.py script is:

====

   pifacedigital = pifacedigitalio.PiFaceDigital()

 

   listener = pifacedigitalio.InputEventListener(chip=pifacedigital)

   for i in range(4):

       listener.register(i, pifacedigitalio.IODIR_ON, switch_pressed)

       listener.register(i, pifacedigitalio.IODIR_OFF, switch_unpressed)

   listener.activate()

====


An other Python-script with interrupts (and I stript it totally) gave the problem with the out of memory problem.

After this, I tested the input handling, by using polling instead of interrupts.

With polling the memory is also stable.


My questions:

- Do more people have this problem with interrupts (latest Python version)?

- How can I solve it?


Best regards from the Netherlands,

Jack.



  • Sign in to reply
  • Cancel
  • Eyedoll
    0 Eyedoll over 11 years ago

    I have not experienced this. I use the "Other" PiFace, the one with the RGB LCD Display (16x2) that has 5 buttons on it.  I have not experienced any memory leaks using any of the scripts or any of modified scripts.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Eyedoll

    Thanks for your input!

     

    I have tested today, and here are the results. First my script:

     

    ==========

    #!/usr/bin/python

     

    import pifacedigitalio

    import time

    import MySQLdb

    from memory_profiler import profile

     

    @profile

    def pulsetodb(pifacedata):

     

      # Open database connection

      db = MySQLdb.connect('localhost', 'web', '*********', 'domotica', charset='utf8', use_unicode=True)

     

      # Prepare SQL query to INSERT a record into the database

      sql = "INSERT INTO raw_piface(timestamp, field, status) VALUES( %s , %s , %s )"

     

      try:

           # Prepare a cursor object using cursor() method

           c = db.cursor()

     

           # Execute the SQL command

           c.execute(sql, ( pifacedata.timestamp, pifacedata.pin_num, pifacedata.direction ))

     

           # Commit your changes in the database

           db.commit()

           c.close()

     

      except:

           # Rollback in case there is any error

           db.rollback()

     

           # Close database connection

           db.close()

     

    @profile

    def main():

      pifacedigital = pifacedigitalio.PiFaceDigital()

      listener = pifacedigitalio.InputEventListener(chip=pifacedigital)

     

      # set up listeners for buttons

      listener.register(0, pifacedigitalio.IODIR_FALLING_EDGE, pulsetodb)

     

      # Start listening for events.

      listener.activate()

     

     

    __name__ == '__main__' and main()

    =========

     

    And now the output from the memory_profiler:

     

    =========

     

    pi@domotica ~ $ python -m memory_profiler ./pif_inputs.py

    Filename: ./pif_inputs.py

     

    Line #    Mem usage    Increment   Line Contents

    ================================================

        49      7.9 MiB      0.0 MiB   @profile

        50                             def main():

        51      7.9 MiB      0.1 MiB   pifacedigital = pifacedigitalio.PiFaceDigital()

        52      8.3 MiB      0.4 MiB   listener = pifacedigitalio.InputEventListener(chip=pifacedigital)

        53                            

        54                             # set up listeners for buttons

        55      8.3 MiB      0.0 MiB   listener.register(0, pifacedigitalio.IODIR_FALLING_EDGE, pulsetodb)

        56                            

        57                             # Start listening for events.

        58      8.3 MiB      0.0 MiB   listener.activate()

     

     

    Filename: ./pif_inputs.py

     

    Line #    Mem usage    Increment   Line Contents

    ================================================

        21      8.5 MiB      0.0 MiB   @profile

        22                             def pulsetodb(pifacedata):

        23                            

        24                             # Open database connection

        25      9.4 MiB      0.9 MiB   db = MySQLdb.connect('localhost', 'web', '~?0aU$+I63', 'domotica', charset='utf8', use_unicode=True)

        26                            

        27                             # Prepare SQL query to INSERT a record into the database

        28      9.4 MiB      0.0 MiB   sql = "INSERT INTO raw_piface(timestamp, field, status) VALUES( %s , %s , %s )"

        29                            

        30      9.4 MiB      0.0 MiB   try:

        31                             # Prepare a cursor object using cursor() method

        32      9.4 MiB      0.0 MiB   c = db.cursor()

        33                            

        34                             # Execute the SQL command

        35      9.4 MiB      0.0 MiB   c.execute(sql, ( pifacedata.timestamp, pifacedata.pin_num, pifacedata.direction ))

        36                            

        37                             # Commit your changes in the database

        38      9.4 MiB      0.0 MiB   db.commit()

        39      9.4 MiB      0.0 MiB   c.close()

        40                            

        41                             except:

        42                             # Rollback in case there is any error

        43                             db.rollback()

        44                            

        45                             # Close database connection

        46      9.4 MiB      0.0 MiB   db.close()

     

     

    Filename: ./pif_inputs.py

     

    Line #    Mem usage    Increment   Line Contents

    ================================================

        21      9.6 MiB      0.0 MiB   @profile

        22                             def pulsetodb(pifacedata):

        23                            

        24                             # Open database connection

        25      9.6 MiB      0.0 MiB   db = MySQLdb.connect('localhost', 'web', '~?0aU$+I63', 'domotica', charset='utf8', use_unicode=True)

        26                            

        27                             # Prepare SQL query to INSERT a record into the database

        28      9.6 MiB      0.0 MiB   sql = "INSERT INTO raw_piface(timestamp, field, status) VALUES( %s , %s , %s )"

        29                            

        30      9.6 MiB      0.0 MiB   try:

        31                             # Prepare a cursor object using cursor() method

        32      9.6 MiB      0.0 MiB   c = db.cursor()

        33                            

        34                             # Execute the SQL command

        35      9.6 MiB      0.0 MiB   c.execute(sql, ( pifacedata.timestamp, pifacedata.pin_num, pifacedata.direction ))

        36                            

        37                             # Commit your changes in the database

        38      9.6 MiB      0.0 MiB   db.commit()

        39      9.6 MiB      0.0 MiB   c.close()

        40                            

        41                             except:

        42                             # Rollback in case there is any error

        43                             db.rollback()

        44                            

        45                             # Close database connection

        46      9.6 MiB      0.0 MiB   db.close()

     

     

    Filename: ./pif_inputs.py

     

    Line #    Mem usage    Increment   Line Contents

    ================================================

        21      9.7 MiB      0.0 MiB   @profile

        22                             def pulsetodb(pifacedata):

        23                            

        24                             # Open database connection

        25      9.7 MiB      0.0 MiB   db = MySQLdb.connect('localhost', 'web', '~?0aU$+I63', 'domotica', charset='utf8', use_unicode=True)

        26                            

        27                             # Prepare SQL query to INSERT a record into the database

        28      9.7 MiB      0.0 MiB   sql = "INSERT INTO raw_piface(timestamp, field, status) VALUES( %s , %s , %s )"

        29                            

        30      9.7 MiB      0.0 MiB   try:

        31                             # Prepare a cursor object using cursor() method

        32      9.7 MiB      0.0 MiB   c = db.cursor()

        33                            

        34                             # Execute the SQL command

        35      9.7 MiB      0.0 MiB   c.execute(sql, ( pifacedata.timestamp, pifacedata.pin_num, pifacedata.direction ))

        36                            

        37                             # Commit your changes in the database

        38      9.7 MiB      0.0 MiB   db.commit()

        39      9.7 MiB      0.0 MiB   c.close()

        40                            

        41                             except:

        42                             # Rollback in case there is any error

        43                             db.rollback()

        44                            

        45                             # Close database connection

        46      9.7 MiB      0.0 MiB   db.close()

     

    =========

    As you can see, the interrupt function is showed once, but the function with SQL is called frequently. Here you can see the memory usage is rising. If the script is running for view hours, it stops on "out of memory". The problem must be in the Interrupt part.

     

    Who can help me?

     

    cheers, Jack.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    Hi Jack,

     

    I have the same problem of memory leaks, did you found solution ?

     

    Greatings Marc

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Eyedoll
    0 Eyedoll over 11 years ago in reply to Eyedoll

    Actually, I stand corrected.  I noticed that my Pi becomes unresponsive after about 48 hours of continuous use of the time display script.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago

    Hi I am experiencing the same issue, the issue seems to lie with the listener as I am pretty sure that I have tried everything else including manual garbage collection and clearing all variables manually after calling the functions. Does anyone have any further insight into this as of yet or possibly a workaround?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago in reply to Eyedoll

    Hi, I have the same problem with the memory.

     

    It is coming from the interupt section.

    I on my way found an work around on restarting my process by a cron job every 15 minutes.

    This is working, but not the best way.

     

    Waiting for an solution.

     

    Greetings Marc

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 10 years ago

    with installed gc i got this on gc.collect()  / and memory is rising -- 

     

    [<pifacedigitalio.core.PiFaceDigital object at 0x1cfa510>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1d6e5f0>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1d860f0>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1d95bd0>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1dae6d0>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1d55b10>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1d46030>,

    <pifacedigitalio.core.PiFaceDigital object at 0x1dc61d0>]

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube