파이톤의ThereadPool Executor에 submit을 진행하면 메모리 소모가 많아집니다

submit을 한 것은 대기열로 취급되는 것 같아서 대기열을 만들면 메모리 소모가 많아집니다.그건

컨디션


python 3.4
메모리 소모를 측정하기 위해 psutil을 설치합니다.
% pip3 install psutil

코드


그냥 Submit 이하만 하고 아무것도 안 해job.
import time
import threading
from concurrent.futures import ThreadPoolExecutor

KB = 1024
MB = KB * 1024

def _print_memory_info():
    import os, psutil
    process = psutil.Process(os.getpid())
    print("rss {} vms {}".format(process.memory_info().rss / MB, process.memory_info().vms / MB))


def job(t):
    return t


_print_memory_info()
futures = []
with ThreadPoolExecutor(max_workers=2) as executor:
    futures = [executor.submit(job, i) for i in range(100000)]
    _print_memory_info()
    result = [f.result() for f in futures]
_print_memory_info()

측량하다

range의 값은 10만과 10만이다.range(10)range(100000)보다 메모리 소모가 더 많았다.
이후with ThreadPoolExecutor as executor 뽑아도 메모리가 열리지 않습니다.range(10)의 경우
% python3 trythread.py
rss 11.04296875 vms 49.8515625
rss 11.04296875 vms 193.859375
rss 11.078125 vms 195.9453125
range(100000)의 경우
% python3 trythread.py
rss 11.0390625 vms 49.8515625
rss 178.98046875 vms 348.0234375
rss 179.87890625 vms 351.078125

좋은 웹페이지 즐겨찾기