2016-06-03 4 views
1

Я работаю над проектом, который в основном требует от меня обрабатывать чуть менее 10 000 IP-адресов, используя ping. К сожалению, я запускаю машину на 8 гб и сбой, если попытаюсь обработать около 2000 IP-адресов. Ниже мой код (который я получил большинство из Fast ping sweep in python):Как уменьшить использование памяти при многопроцессорности python?

logs = open('addresses.txt', 'r').readlines() 
pool = [ multiprocessing.Process(target=pinger, args=(jobs,results)) for log in logs ] 
for p in pool: 
    p.start() 
for i in logs: 
    jobs.put(i) 
for p in pool: 
    jobs.put(None) 
for p in pool: 
    p.join() 

Я новичок в многопроцессорной, но мне было интересно, есть ли какой-нибудь способ, которым я все еще можете использовать его, но назначать задания для доли журналов, чтобы спасти память за счет времени, так что когда задания завершены, их можно переназначить в необработанные журналы. Извините, если это неясно - снова, новичок в этом.

+0

hmmm ... попытаться ограничить количество процессов, которые работают одновременно? ;) – alfasin

+0

@alfasin Я понимаю, что концептуально это то, что я должен делать. я не понимаю, как именно это сделать, а также как обеспечить надлежащее переназначение процессов. если честно, все еще пытаюсь обернуть голову вокруг многопроцессорности в целом – Mike

ответ

1

Выяснил это. Я импортировал itertools и изменил понимание списка на:

pool = [ multiprocessing.Process(target=pinger, args=(jobs,results)) for log in itertools.islice(logs, 0, some_number_small_enough) ]