日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python processpoolexector 释放内存_使用Python的multiprocessing.pool,内存使用量不断增长...

發布時間:2024/1/23 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()

我發現內存使用(包括VIRT和RES)一直持續到close()/ join(),有沒有解決方法擺脫這個?我用2.7嘗試了maxtasksperchild,但它也沒有幫助.

我有一個更復雜的程序,調用apply_async()?6M次,并且在~1.5M點我已經有6G RES,為了避免所有其他因素,我將程序簡化為以上版本.

編輯:

原來這個版本效果更好,感謝大家的意見:

#!/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()

我沒有放任何鎖,因為我認為主進程是單線程的(回調或多或少像我讀過的每個文檔的事件驅動的東西).

我將v1的索引范圍更改為1,000,000,與v2相同并進行了一些測試 – 這對我來說很奇怪v2甚至比v1快?10%(33s vs 37s),也許v1做了太多的內部列表維護工作. v2絕對是內存使用的贏家,它從未超過300M(VIRT)和50M(RES),而v1曾經是370M / 120M,最好是330M / 85M.所有數字僅為3~4次測試,僅供參考.

總結

以上是生活随笔為你收集整理的python processpoolexector 释放内存_使用Python的multiprocessing.pool,内存使用量不断增长...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。