Python: получить блокировку с многопоточностью и без нееPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Python: получить блокировку с многопоточностью и без нее

Сообщение Anonymous »


У меня есть приложение Python + Flask на сервере Nginx + Gunicorn с несколькими рабочими процессами.

Одним из ключевых компонентов приложения является «индекс». Каждый работник и каждый поток должны иметь уникальный индекс. При каждой операции индекс увеличивается на 1.

Чтобы предотвратить использование одного и того же «индекса» более чем одним рабочим процессом/потоком, он сохраняется в Redis, а чтение, приращение и сохранение индекса в/из Redis защищается с помощью Lock().

Индекс извлекается и увеличивается с помощью как однопоточных, так и многопоточных функций.

Проблема в том, что Lock нельзя заблокировать с помощью многопоточности. Я пробовал разные варианты двух предложенных здесь решений, но ни одно из них не сработало, видимо потому, что оно должно работать как с многопоточным, так и с непоточным режимом.

Код распределен (и должен быть) в трех разных файлах .py.

#rotator.py из многопроцессорного импорта Lock блокировка = Блокировка() защита приращения_индекса(): time_before = datetime.datetime.now() с замком: индекс = get_index_from_redis() индекс = индекс + 1 save_index_at_redis (индекс) защита rotator_of_index(): новый_индекс = инкремент_индекс() # делать другие вещи, регистрировать новый индекс и т. д. вернуть новый_индекс # Salary_worker.py из импорта ротатора rotator_of_index защита do_work(n): индекс = ротатор_индекса() # делать другие дела вернуть что-то # do_work без многопоточности: защита do_more_work(): что-то = do_work(n) # делай больше вещей do_with_threading.py из зарплаты_работника импортировать do_work из пула импорта multiprocessing.dummy как ThreadPool защита do_work_with_threading(): list_of_n = [1, 2, 3, 4, 5] пул = ThreadPool(15) list_of_results =pool.map(do_work, list_of_n) пул.закрытие() пул.join() печать (список_результатов) Я также пробовал использовать лучевой пул для замены многопроцессорного пула, но безуспешно.

Есть ли альтернатива, чтобы это заработало?
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Скрипт Python с многопоточностью и связью по шине CAN не прерывается
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Разница между многопроцессорностью, асинхронностью, многопоточностью и concurrency.futures в Python
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорность Python в сочетании с многопоточностью
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Многопроцессорность Python в сочетании с многопоточностью
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Моя программа на Python с многопроцессорностью и многопоточностью никогда не остановится
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»