Как лучше всего распределить структуру данных между процессами?
Трубопроводы.
origin.py | process1.py | process2.py | process3.py
Разбейте свою программу так, чтобы каждый расчет представлял собой отдельный процесс следующей формы.
def transform1( piece ):
Some transformation or calculation.
Для тестирования вы можете использовать его следующим образом.
def t1( iterable ):
for piece in iterable:
more_data = transform1( piece )
yield NewNamedTuple( piece, more_data )
Для воспроизведения всего расчета в одном процессе вы можете сделать это.
for x in t1( t2( t3( the_whole_structure ) ) ):
print( x )
Вы можете обернуть каждое преобразование небольшим количеством файлового ввода-вывода. Pickle хорошо работает для этого, но хорошо работают и другие представления (например, JSON или YAML).
while True:
a_piece = pickle.load(sys.stdin)
more_data = transform1( a_piece )
pickle.dump( NewNamedTuple( piece, more_data ) )
Каждый шаг обработки становится независимым процессом на уровне ОС. Они будут работать одновременно и немедленно потребят все ресурсы уровня ОС.
Есть ли способ справиться с проблемой отложенной оценки без использования блокировок (несколько процессов записывают одно и то же значение)?
Трубопроводы.