次のスクリプトは、サイズ 100000 の 100 個のランダムな辞書を生成し、各 (キー、値) タプルをキューに送り、1 つの別のプロセスがキューから読み取ります。
import multiprocessing as mp
import numpy.random as nr
def get_random_dict(_dummy):
return dict((k, v) for k, v in enumerate(nr.randint(pow(10, 9), pow(10, 10), pow(10, 5))))
def consumer(q):
for (k, v) in iter(q.get, 'STOP'):
pass
q = mp.Queue()
p = mp.Process(target=consumer, args=(q,))
p.start()
for d in mp.Pool(1).imap_unordered(get_random_dict, xrange(100)):
for k, v in d.iteritems():
q.put((k, v))
q.put('STOP')
p.join()
メインプロセスがフィードするときにコンシューマープロセスがキューからデータをプルするため、メモリ使用量が一定であると予想していました。キューにデータが溜まらないことを確認しました。
ただし、メモリ消費量を監視したところ、スクリプトが実行されるにつれて増加し続けています。に置き換えるimap_unordered
とfor _ in xrange(100): d = get_random_dict()
、メモリ消費量は一定になります。説明は何ですか?