Разделение замка между рабочими оружейных

Есть ли хороший способ разделить многопроцессорную блокировку между рабочими-оружейниками? Я пытаюсь написать json API с Flask. Некоторые вызовы API взаимодействуют с классом python, который управляет запущенным процессом (например, ffmpeg для преобразования видео). Когда я увеличу число веб-работников до более чем 1, как я могу гарантировать, что только один работник одновременно взаимодействует с классом?

Сначала я хотел использовать multiprocessing.Lock, чтобы функция start () могла быть атомарной. Я не думаю, что я нашел правильное место для создания Замка, чтобы он был общим для всех работников:

# runserver.py
from flask import Flask
from werkzeug.contrib.fixers import ProxyFix
import dummy

app = Flask(__name__)

@app.route('/')
def hello():
    dummy.start()
    return "ffmpeg started"

app.wsgi_app = ProxyFix(app.wsgi_app)

if __name__ == '__main__':
    app.run()

Вот моя фиктивная операция:

# dummy.py
from multiprocessing import Lock
import time

lock = Lock()

def start():
    lock.acquire()

    # TODO do work
    for i in range(0,10):
        print "did work %s" % i
        time.sleep(1)

    lock.release()

Когда я обновляю страницу несколько раз, я вижу результаты каждого вызова, сплетенного вместе.

Я лаю не на том дереве? Есть ли более простой способ убедиться, что одновременно запускается только копия класса обработки (здесь только фиктивный метод start ())? Я думаю, что мне может понадобиться что-то вроде сельдерея для выполнения задач (и просто использовать только 1 работника), но это кажется немного излишним для моего небольшого проекта.

Ответы на вопрос(2)

Ваш ответ на вопрос