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%