Пара вариантов: posix_ipc и использование блокировок файлов . Я не в восторге от этих решений, так как, похоже, должен быть встроенный подход mod_wsgi или библиотека Python для межпроцессной (без разделения общего родительского процесса) синхронизации.
Вот реализация блокировки файлов:
from contextlib import contextmanager
import fcntl
@contextmanager
def file_locked(filename, exclusive=True):
lockfile = open(filename, 'w')
if exclusive:
fcntl.flock(lockfile, fcntl.LOCK_EX)
else:
fcntl.flock(lockfile, fcntl.LOCK_SH)
yield
fcntl.flock(lockfile, fcntl.LOCK_UN)
if __name__ == '__main__':
from time import sleep
from random import random
from os import getpid
while True:
print '%d waiting for lock' % getpid()
with file_locked('filelock.lck'):
print '%d got the lock'% getpid()
sleep(random())
print '%d released the lock\n' % getpid()