2015-07-07 3 views
0

У меня есть требование, когда у меня есть 2 пользователя, которые называют тот же метод. Мне нужно установить некоторую синхронизацию, чтобы запрос от пользователей выполнялся последовательно. Это означает, что user1 & user2 может выполнять один и тот же метод параллельно, но если запрос user1 последовательно, каждый запрос должен выполняться последовательно. В принципе, есть способ синхронизации на основе какого-то контекста?Синхронизация Python на основе контекста

+0

Вы ищете блокировки? https://docs.python.org/2/library/threading.html#threading.Lock – Wolph

+0

@ Вольф по существу да, но на основе какого-то контекста или идентификации, которые не видны в методах блокировки, может быть, я могу ошибаться. – nebi

ответ

0

Хотя стандартный механизм блокировки в Python на самом деле не поддерживает контекст, его легко расширить.

import threading 
import collections 

locks = collections.defaultdict(threading.RLock) 

И теперь использование:

# To acquire the lock 
lock_a = locks['a'].acquire() 

# Do something here... 

# Release the lock again 
lock_a.release() 
+0

Я думал о подобной линии, но задавался вопросом о каком-то установленном пути. У вас есть какие-либо другие предложения? – nebi

+0

Это полностью зависит от вашей цели, как правило, я бы рекомендовал оставить это на сервере базы данных или другом программном обеспечении. Есть много, что может пойти не так с кодом, как это, поэтому, если его можно избежать, это хорошо. – Wolph

Смежные вопросы