请教 Python 多线程内存不释放怎么排查
資深大佬 : r150r 2
新手写了一个多线程的爬虫,所有线程都执行完了,但是一直占着 1.5GB 的内存(任务数越多不释放的内存越多) 不知道怎么排查哪里出问题,pympler 看不太懂问题到底出在哪里,请教该如何正确的排查问题
执行多线程函数的代码:
def mainfunc(tasknum, thread): tr = tracker.SummaryTracker() tr.print_diff() list = [] for i in range(tasknum): list.append(str(i)) pool = threadpool.ThreadPool(thread) requests = threadpool.makeRequests(childfunc, list) for req in requests: pool.putRequest(req) pool.wait() tr.print_diff()
tr.print_diff()打印的内容
初始化:
types | # objects | total size ========================== | =========== | ============ list | 3741 | 350.84 KB str | 3739 | 260.01 KB int | 673 | 18.40 KB dict | 2 | 352 B tuple | 4 | 256 B code | 1 | 144 B function (store_info) | 1 | 136 B cell | 2 | 96 B functools._lru_list_elem | 1 | 80 B method | -1 | -64 B
所有线程结束后:
types | # objects | total size ===================================== | =========== | ============ dict | 202860 | 43.69 MB list | 100169 | 8.47 MB str | 102446 | 5.62 MB threadpool.WorkRequest | 100000 | 5.34 MB int | 100836 | 3.08 MB _io.BufferedReader | 294 | 2.35 MB tuple | 1480 | 93.30 KB type | 76 | 85.98 KB code | 572 | 80.57 KB bytes | 1219 | 51.49 KB set | 32 | 43.50 KB socket.socket | 294 | 27.56 KB pymysql.connections.Connection | 294 | 16.08 KB socket.SocketIO | 294 | 16.08 KB DBUtils.SteadyDB.SteadyDBConnection | 294 | 16.08 KB
大佬有話說 (24)