Browse Source

Added weakref tests, py-spy example

pull/114/head
Eugenio Parodi 3 years ago
parent
commit
7685dfe1a1
  1. 13
      README.md
  2. 60
      tests/test.generic.006.weakref.01.py
  3. 32
      tests/test.generic.006.weakref.02.py

13
README.md

@ -92,6 +92,19 @@ python3 -m cProfile -o profiler.bin tests/test.ui.004.py
cprofilev -f profiler.bin cprofilev -f profiler.bin
# open http://127.0.0.1:4000 # open http://127.0.0.1:4000
``` ```
##### py-spy
```bash
# install
pip install py-spy
# run the application
python3 demo/demo.py
# on another terminal run the py-spy
sudo env "PATH=$PATH" \
py-spy top \
--pid $(ps -A -o pid,cmd | grep demo.py | grep -v grep | sed 's,python.*,,')
```
##### pyroscope ##### pyroscope
[pyroscope](https://pyroscope.io/) can be used as well for profiling [pyroscope](https://pyroscope.io/) can be used as well for profiling

60
tests/test.generic.006.weakref.01.py

@ -0,0 +1,60 @@
#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2023 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import weakref
import gc
class C:
def method(self):
print("method called!")
return 1234
c = C()
r = weakref.ref(c.method)
print(f"{r=}")
print(f"{r()=}")
r = weakref.WeakMethod(c.method)
print(f"{r=}")
print(f"{r()=}")
print(f"{r()()=}")
del c
print(f"{gc.collect()=}")
print(f"{r()=}")
def m3():
print("Method 3")
m = m3
l = lambda : print("lambda1")
r3 = weakref.WeakMethod(m3)
r2 = weakref.WeakMethod(lambda : print("Method 2"))
r2()
r3()

32
tests/test.generic.006.weakref.02.py

@ -0,0 +1,32 @@
#!/usr/bin/env python3
# MIT License
#
# Copyright (c) 2023 Eugenio Parodi <ceccopierangiolieugenio AT googlemail DOT com>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import weakref
class Object:
pass
kenny = Object()
weakref.finalize(kenny, print, "You killed Kenny!")
del kenny
Loading…
Cancel
Save