1
imn1 2020-07-27 16:38:01 +08:00
关注一下
有文章写线程结束未必销毁对象,我不熟,听楼下意见 我现在喜欢函数+dataclass,或者在一个类方法里面做线程处理,每线程只生成记录数据的对象 这样不会创建很多对象 |
2
O0oOo0 2020-07-27 17:23:31 +08:00
会,可以参考 https://learnku.com/python/t/22973/instagram-actual-combat-exploring-write-time-replication-friendly-python-garbage-collection-mechanism 引用计数导致 python 线程中的对象无法使用写时复制
|
3
nthhdy 2020-07-27 18:17:56 +08:00
是在线程函数里定义 class,还是预先定义好多个 class 传入线程函数?
照我的浅见,线程函数不定义新 class,不会有类对象被新建,不会占更多内存。 如果在线程函数里面定义 class,每一个新进程都会创建自己的类对象,起多少线程就占多少份内存。 |
4
nthhdy 2020-07-27 18:22:09 +08:00
|
6
nthhdy 2020-07-27 18:40:39 +08:00
照我浅见,如果 python2 的话,我理解类似这样?
```python import thread def thread_func(cls): a = cls() # do something with a .... def work(): class DefineClass: pass print id(DefineClass) thread.start_new_thread(thread_func, (DefineClass, )) for i in range(100): work() ``` 那么每次调用 work,都会新建一个类对象 |
7
nthhdy 2020-07-27 18:45:27 +08:00
|
8
fasionchan 2020-07-27 19:02:14 +08:00
内存是否增加取决于对象创建以及销毁,跟多线程无关。如果你一直创建对象,但不回收,内存肯定是要增加的。
|
10
qybing OP @fasionchan 线程函数是死循环,对象不销毁
|
12
qybing OP 有什么方案可以解决内存增加的问题吗
|
13
fasionchan 2020-07-28 13:25:01 +08:00
@qybing 意思是线程不退出吗?
|