Django разделяет блокировку между рабочими gunicorn

Я пытаюсь выполнить цикл внутри функции представления и не хочу, чтобы другой рабочий выполнял тот же цикл.

Для этого я использую Lock(), но мне не удается этого добиться.

from multiprocessing import Lock
import time

lock = Lock()

def loop_func(request):
    lock.acquire()

     # loop start
     for i in range(0,100):
        print ("did work ", i)
        time.sleep(1)
     finally:
        lock.release()

может ли кто-нибудь помочь мне, если есть способ, где я могу сделать общую блокировку для всех рабочих, так что блокировка будет ждать, пока другой рабочий закончит и войдет в цикл

Я смог преодолеть это, используя redis-lock .

from redis import Redis
conn = Redis()
import redis_lock

lock = redis_lock.Lock(conn, "request_lock_adding_data")

def loop_func(request):
    lock.acquire()

     # loop start
     for i in range(0,100):
        print ("did work ", i)
        time.sleep(1)
     finally:
        lock.release()

Протестировано с 10 параллельными запросами работает 100%

Вернуться на верх