'''
7 42.5820312500 MiB 42.5820312500 MiB 1 @profile(precision=10)
8 def foo():
9 42.5820312500 MiB 0.0000000000 MiB 1 gc.collect()
10 43.0156250000 MiB 0.4335937500 MiB 1 print(len(gc.get_objects()))
11 43.0156250000 MiB 0.0000000000 MiB 1 session = requests.Session()
12
13 45.9453125000 MiB 2.9296875000 MiB 1 r = session.get('https://v2ex.com/4')
14 45.9453125000 MiB 0.0000000000 MiB 1 r.close()
15
16 46.2070312500 MiB 0.2617187500 MiB 1 r = session.get('https://v2ex.com')
17 46.2070312500 MiB 0.0000000000 MiB 1 r.close()
18
19 46.2343750000 MiB 0.0273437500 MiB 1 r = session.get('https://v2ex.com/1')
20 46.2343750000 MiB 0.0000000000 MiB 1 r.close()
21
22 46.2421875000 MiB 0.0078125000 MiB 1 r = session.get('https://v2ex.com/2')
23 46.2421875000 MiB 0.0000000000 MiB 1 r.close()
24
25 46.2500000000 MiB 0.0078125000 MiB 1 session.close()
26 46.2500000000 MiB 0.0000000000 MiB 1 del session
27 46.2500000000 MiB 0.0000000000 MiB 1 del r
28
29 46.2500000000 MiB 0.0000000000 MiB 1 gc.collect()
30 46.5390625000 MiB 0.2890625000 MiB 1 print(len(gc.get_objects()))
'''
1
est 2021-06-15 16:24:42 +08:00
https://github.com/psf/requests/issues/4601
Call Session.close() and Response.close() can avoid the memory leak. |
2
est 2021-06-15 16:25:42 +08:00
LZ 可以试下上面给出的方法。如果成功了。那其实不算泄漏。requests 头铁忠实实现了 http/1.1 的 keep-connection 连接复用而已。
|
3
v2exblog OP @est 刚才贴了一段简单的代码,环境是 python3.7,似乎 Call Session.close() and Response.close() 内存没有明显减少
|
4
ospider 2021-06-15 17:23:56 +08:00
解决方法就是用 httpx,放弃 requests
|
5
Trim21 2021-06-15 17:33:39 +08:00 via Android
httpx 底层跟 requests 不一样,不知道有没有泄漏的问题。
|
6
Huelse 2021-06-15 20:57:52 +08:00
|
7
LeeReamond 2021-06-15 21:36:18 +08:00
@v2exblog 内存释放也不会将堆内存还给系统,我觉得没有减少不代表泄露
|