下面是一个非常简单的代码示例。。。在
from concurrent.futures import ProcessPoolExecutor
import pandas
if __name__ == "__main__":
def i_use_lots_of_memory():
print 'doing something that uses a lot of memory'
data = pandas.read_csv('large_txt_file.txt')
del data
# do other things here as soon as I've solved mem usage issues
print 'ha ha I used up a ton of memory.'
def simplest_callback_ever(future):
_ = future.result()
print 'callback was run'
class ManagesFileReading(object):
def __init__(self):
self.pool = ProcessPoolExecutor(max_workers=24)
def add_job(self, callback=None):
future = self.pool.submit(i_use_lots_of_memory)
if callback:
future.add_done_callback(callback)
mfr = ManagesFileReading()
mfr.add_job(simplest_callback_ever)
在本例中,我打开一个800MB的文本文件,它占用大约2GB的内存。输出是。。。在
^{2}$所以任务完成了,问题是内存永远不会释放。即使未来已经完成,它也不会释放记忆。唯一可以释放它的方法是通过运行self关闭进程池_池.关机()
除非我误解了ProcessPoolExecutor是如何工作的,否则当回调函数完成时,就意味着任务完成了,对吧?为什么不删除未来,释放内存?有什么想法吗?在
目前没有回答
相关问题 更多 >
编程相关推荐