Это можно сделать с помощью Ray , библиотеки для написания параллельного и распределенного Python.
Чтобы запустить приведенный ниже код, сначала создайте input.txt
следующим образом.
printf "1\n2\n3\n4\n5\n6\n" > input.txt
Затем вы можете параллельно обрабатывать файл, добавив декоратор @ray.remote
к функции parse
и выполнив несколько копий параллельно, как показано ниже
import ray
import time
ray.init()
@ray.remote
def parse(line):
time.sleep(1)
return 'key' + str(line), 'value'
# Submit all of the "parse" tasks in parallel and wait for the results.
keys_and_values = ray.get([parse.remote(line) for line in open('input.txt')])
# Create a dictionary out of the results.
result = dict(keys_and_values)
Обратите внимание, что оптимальный способ сделать это будет зависеть от того, сколько времени потребуется для запуска функции parse
. Если это занимает одну секунду (как указано выше), то имеет смысл разбирать одну строку на задачу Ray. Если это занимает 1 миллисекунду, то, вероятно, имеет смысл анализировать несколько строк (например, 100) для каждой задачи Ray.
Ваш сценарий достаточно прост, чтобы можно было использовать многопроцессорный модуль, однако, как только вы захотите сделать что-нибудь более сложное или захотите использовать несколько машин вместо одной, тогда с Ray это будет намного проще.
См. Документацию Ray .