Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.mixmin.net!news.unit0.net!feeder1.cambriumusenet.nl!feed.tweaknews.nl!194.109.133.87.MISMATCH!newsfeed.xs4all.nl!newsfeed1a.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.152 X-Spam-Level: * X-Spam-Evidence: '*H*': 0.70; '*S*': 0.00; 'received:198': 0.07; 'linear': 0.09; 'objects,': 0.09; 'attributed': 0.16; 'filename:fname piece:signature': 0.16; 'invoking': 0.16; 'subject:slow': 0.16; 'thanks,': 0.17; 'app': 0.19; 'received:10.0.1': 0.19; 'memory': 0.22; 'tried': 0.27; 'points': 0.29; 'words': 0.29; 'kevin': 0.30; 'further?': 0.31; 'updated': 0.34; 'created': 0.35; 'except': 0.35; 'objects': 0.35; 'test': 0.35; 'there': 0.35; 'done': 0.36; 'next': 0.36; 'received:10.0': 0.36; 'application': 0.37; 'received:10': 0.37; 'clear': 0.37; 'being': 0.38; 'growing': 0.38; 'to:addr:python-list': 0.38; 'little': 0.38; 'to:addr:python.org': 0.39; 'how': 0.40; 'skip:o 30': 0.61; 'between': 0.67; 'believe': 0.68; 'watching': 0.68; 'respect': 0.70; 'manner': 0.72; 'analysis': 0.75; '100,000': 0.84; 'cycled': 0.84; 'execution.': 0.84; 'growing.': 0.84; 'leak.': 0.84 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=riseup.net; s=squak; t=1410072154; bh=J7hLpUYO+1+iH+e9zohWz/lrYyod0EINwBRJhmqAU5Y=; h=Date:From:To:Subject:From; b=CWzYIywMf0N6ud/dVWkDI4UxGtxANQuPrEzyXbqZocDGVRbKen5iyA4nqF6Ol8mFs tO9dg8BDOraYyaP1DwYxLrgSdXnY0wZnjfYfSK9T4VM/iq4fUZ7WOW7VSPNDllizAX /VB8J+TfzaZufDOR9Ki4hKrGvMFhCNdC24+7oko0= Date: Sun, 07 Sep 2014 06:42:11 +0000 From: kjs MIME-Version: 1.0 To: python-list@python.org Subject: weakref, memory management and execution slow down in PyQt4 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="w1mq88SKOkwddoep2g2omRdcaUDcaALcb" X-Virus-Scanned: clamav-milter 0.98.4 at mx1 X-Virus-Status: Clean X-Mailman-Approved-At: Sun, 07 Sep 2014 10:21:23 +0200 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 241 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1410078084 news.xs4all.nl 2967 [2001:888:2000:d::a6]:33923 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:77669 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --w1mq88SKOkwddoep2g2omRdcaUDcaALcb Content-Type: multipart/mixed; boundary="------------050605000901060408000403" This is a multi-part message in MIME format. --------------050605000901060408000403 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable I built a small application using PyQt4 and pyqtgraph to visualize some data. The app has 32 graphs that plot deques of size 512. The plots are updated when 200 ints are cycled through each deque. The plotting slows down in a linear manner with respect to time. In other words after cycling through 100,000 data points the time between calls to process events is much longer than it was at T0. I have done a little memory profiling. Watching the process on top, it's clear that there is some memory leak. I also tried invoking objgraph.show_most_common_types(). This test reveals that the number of objects being created plateaus, except for weakref objects, which keep growing and growing. I have come to believe that the growing number of weakrefs is slowing down execution. Is my analysis misguided? How can I introspect further? If the slowdown can be attributed to weakref escalation, what are some next steps? Thanks, Kevin --------------050605000901060408000403 Content-Type: application/pgp-keys; name="0x8A61431E.asc" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="0x8A61431E.asc" -----BEGIN PGP PUBLIC KEY BLOCK----- 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3D=3D =3Dy5+1 -----END PGP PUBLIC KEY BLOCK----- --------------050605000901060408000403-- --w1mq88SKOkwddoep2g2omRdcaUDcaALcb Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIcBAEBCgAGBQJUC/5NAAoJEF4CNj7uogNwp3AP/0Me5SZZUKyf2428ciskHnSd 1ZboH0Ej7p3eeKEOX9Ul6udkszSlD3jaW/PawtOCZzN9I9+tUPFn7jBnMQpcxrT/ n5jhw5lg0ZKSc1EKc0gkEkcJ0bmoUK7Y67Br1h9Ah0/+uogVlhOBiLnRMsx0+Kj+ jn+yiVVAdysqjzxzMblDGy2ay2tsvEEqFo5bo1yOdC47HEfv0RkhfH+TOE9L/Qfh gqlx8hhAwGldcTMXHmybKVhuQr0wXJcXp1jEVdJShOSUodg60ezP1HlZGOmlYEEs tGpBWP1uFdMw8FOF+k0QAQIKO+YXocpQDWDR2UJasbVudRS7a2XE7Cvweh3TDbLH zCuEaJAgsXcn977OziNWXAOpTCVDNFjhhWKOLqJUogdO0dhHcb3StExFMutYZMK1 XSvYa2IqzvPQB5hB6ZCQ3hVXbhJkTebLliQ8l5TpFszJ2n2bIZtAT/DiiPVPBEYe q97fDNyMFaP+LN4QCV8jcajgyThNpl+ezSeHdNWcOVXf4jLK0RjCGjjuvnP7psL2 CBU7Y+tn4ty4atiHbQOl/adXlz+x7Li65omYWcTxQOKQGnuFRuoZAFeExCvZhs1H VZe656zqwQ+FEs66UwCDU9w7P7AY3feN0w/JkVO8yFLrc07r6VR1q4oNZVrcyHUr 4/EahVlUvl41Aqb/AZnx =jEim -----END PGP SIGNATURE----- --w1mq88SKOkwddoep2g2omRdcaUDcaALcb--