Sharing a lock between gunicorn workers Sharing a lock between gunicorn workers flask flask

Sharing a lock between gunicorn workers


I tried something, and it seems to work. I put preload_app = True in my gunicorn.conf and now the lock seems to be shared. I am still looking into exactly what's happening here but for now this is good enough, YMMV.


Follow peterw's answer, the workers can share the lock resource.

But, It is better to use try-finally block to ensure the lock will always be released.

# dummy.pyfrom multiprocessing import Lockimport timelock = Lock()def start():    lock.acquire()    try:        # TODO do work        for i in range(0,10):            print "did work %s" % i            time.sleep(1)    finally:        lock.release()


Late addition:
If for some reason, using preload_app is not feasible, then you need to use a named lock. This ensures that all processes are using the same lock object.Using mp.Lock() will create a different object for each process, negating any value.

I saw this package but did not use it yet. It supplies a named lock in the scope of one machine; that means that all processes within the same machine will use the same lock, but outside the boundaries of one machine this solution is not appropriate.