Я видел ссылку here и пытался использовать метод для цикла for for, но, похоже, он работает не так, как ожидалось.Почему производительность многопроцессорности невидима?
def concatMessage(obj_grab, content):
for logCatcher in obj_grab:
for key in logCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += " " + logCatcher.index + " " + logCatcher.dic_map[key]
return content
def transferConcat(args):
return concatMessage(*args)
if __name__ == "__name__":
pool = Pool()
content = pool.map(transferConcat, [(obj_grab, content)])[0]
pool.close()
pool.join()
Я хочу повысить производительность цикла, потому что требуется 22 секунды для запуска.
Когда я запускаю метод напрямую, это также занимает около 22 секунд.
Кажется, что усовершенствование не удалось.
Что мне делать, чтобы увеличить скорость моего цикла? Почему pool.map
не работает в моем случае?
После напоминают по nablahero, я пересмотрел свой код, как показано ниже:
if __name__ == "__main__":
content = input_file(target).split("\n")
content = manager.list(content)
for files in source:
obj_grab.append((LogCatcher(files), content))
pool = Pool()
pool.map(transferConcat, obj_grab)
pool.close()
pool.join()
def concatMessage(LogCatcher, content):
for key in LogCatcher.dic_map:
regex = re.compile(key)
for j in range(len(content)):
for m in re.finditer(regex, content[j]):
content[j] += LogCatcher.index + LogCatcher.dic_map[key]
def transferConcat(args):
return concatMessage(*args)
после долгого ожидания, это вызвало 82 секунд, чтобы закончить ...
Почему я получил эту ситуацию? Как я могу пересмотреть свой код?
obj_grab список, который содержит logCatchers из другого файла intput содержания является файлом я хочу Concat, а также использовать менеджер(), чтобы позволить многопроцессному Concat того же файл.
Что значит «исполнение невидимо»? Какая производительность видима? – number5
несвязанный, но вы можете перебирать содержимое вместо индексации –
Этот примерный код будет * медленнее *, чем эквивалентный последовательный код. Все, что вы делаете, это запуск одной функции в дочернем процессе и ее завершение. Стоимость IPC для отправки функции и ее аргументов дочернему процессу сделает ее медленнее, чем если бы вы просто запускали ее все в родительском. 'Pool.map' полезен только тогда, когда вы используете его для параллельной работы многих функций. – dano