Основные решения, которые приходят на ум: либо
- Храните частичную информацию для каждого процесса
staging file
- Положитесь на
the os
для атомных moves
или
- Хранить частичную информацию для каждого процесса
memory
- Положиться на
interprocess communication / locks
для атомных writes
Для первого, например:
import tempfile
import os
FINAL = '/tmp/something'
def do_stuff():
fd, name = tempfile.mkstemp(suffix="-%s" % os.getpid())
while keep_doing_stuff():
os.write(fd, get_output())
os.close(fd)
os.rename(name, FINAL)
if __name__ == '__main__':
do_stuff()
Вы можете выбрать запуск по отдельности из оболочки (как показано выше) или с некоторыми оболочками процесса (подпроцесс или многопроцессорность подойдут), и в любом случае будет работать.
Для межпроцессного процесса вы, вероятно, захотите порождать все из родительского процесса
from multiprocessing import Process, Lock
from cStringIO import StringIO
def do_stuff(lock):
output = StringIO()
while keep_doing_stuff():
output.write(get_output())
with lock:
with open(FINAL, 'w') as f:
f.write(output.getvalue())
output.close()
if __name__ == '__main__':
lock = Lock()
for num in range(2):
Process(target=do_stuff, args=(lock,)).start()