使用mod_wsgi时如何控制对共享资源的访问?

| 在mod_wsgi中,Web请求可以由python解释器在不同的进程中处理。我有一个共享资源,访问需要同步到该资源。 (此资源不是数据库。) Python的多重处理具有许多很好的同步原语,但似乎都依赖于在生成时共享的原语。由于进程是由mod_wsgi创建的,因此我无法控制它们的生成。 对共享资源使用互斥锁等最简单的方法是什么?
已邀请:
几个选项是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()

要回复问题请先登录注册