python processpoolexector 释放内存_使用Python的multiprocessing.pool,内存使用量不断增长...
這是程序:
#!/usr/bin/python
import multiprocessing
def dummy_func(r):
pass
def worker():
pass
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=16)
for index in range(0,100000):
pool.apply_async(worker, callback=dummy_func)
# clean up
pool.close()
pool.join()
我發(fā)現(xiàn)內(nèi)存使用(包括VIRT和RES)一直持續(xù)到close()/ join(),有沒有解決方法擺脫這個(gè)?我用2.7嘗試了maxtasksperchild,但它也沒有幫助.
我有一個(gè)更復(fù)雜的程序,調(diào)用apply_async()?6M次,并且在~1.5M點(diǎn)我已經(jīng)有6G RES,為了避免所有其他因素,我將程序簡化為以上版本.
編輯:
原來這個(gè)版本效果更好,感謝大家的意見:
#!/usr/bin/python
import multiprocessing
ready_list = []
def dummy_func(index):
global ready_list
ready_list.append(index)
def worker(index):
return index
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=16)
result = {}
for index in range(0,1000000):
result[index] = (pool.apply_async(worker, (index,), callback=dummy_func))
for ready in ready_list:
result[ready].wait()
del result[ready]
ready_list = []
# clean up
pool.close()
pool.join()
我沒有放任何鎖,因?yàn)槲艺J(rèn)為主進(jìn)程是單線程的(回調(diào)或多或少像我讀過的每個(gè)文檔的事件驅(qū)動(dòng)的東西).
我將v1的索引范圍更改為1,000,000,與v2相同并進(jìn)行了一些測(cè)試 – 這對(duì)我來說很奇怪v2甚至比v1快?10%(33s vs 37s),也許v1做了太多的內(nèi)部列表維護(hù)工作. v2絕對(duì)是內(nèi)存使用的贏家,它從未超過300M(VIRT)和50M(RES),而v1曾經(jīng)是370M / 120M,最好是330M / 85M.所有數(shù)字僅為3~4次測(cè)試,僅供參考.
總結(jié)
以上是生活随笔為你收集整理的python processpoolexector 释放内存_使用Python的multiprocessing.pool,内存使用量不断增长...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql count null_MyS
- 下一篇: python 跳出for循环_pytho