Я храню словарь в сеансе Django, который доступен нескольким потокам. Все потоки могут обновлять этот словарь, потоки также получают значения из словаря для запуска процесса. Я хочу знать, является ли сессия Django поточно-ориентированной или я должен использовать блокировки или семафоры?
Типичный пример:
Thread1:
threadDict = request.session.get('threadDict', None)
if threadDict['stop']:
#break the for loop exit the thread
else:
#do some processing and update some values in thread dictionary
threadDict['abc'] = 0
request.session['threadDict'] = threadDict (Point1)
def someFunction():
#this function is used to send stop signal to thread
threadDict = request.session.get('threadDict', None)
threadDict['stop'] = True
request.session['threadDict'] = threadDict (Point2)
Есть ли вероятность того, что когда Point2
обновит словарь потока в сеансе сразу после того, как он обновит Point1
, также обновит его, то мой stop
для выхода из потока будет потерян.
Подробнее
Запрос Ajax запускает четыре потока, которые загружают образцы из 4 разных URL. Почему я использовал темы? потому что я хочу показать пользователю, какие образцы в настоящее время загружаются, а какие остались. Все потоки обновят свое состояние в словаре в течение сессии. После запуска потоков я делаю ajax-запрос каждые две секунды, беру словарь из сессии и считываю текущее состояние потоков. Но эта идея не удалась, потому что потоки не зависят от запроса и их сеанса. Каждый запрос ajax определенно имеет свой сеанс, но я не могу передать этот сеанс потокам, потому что, когда они однажды начнутся, они не зависят от остального мира (может быть, я могу передать его, но я не могу передать его так быстро, как обработка выполняется потоки). поэтому, чтобы решить эту проблему, я выбираю кеш-каркас вместо сессии. так как кеш доступен из любого места. Потоки сохраняют свое состояние в словаре и помещают обратно в кеш, а через каждые две секунды я беру словарь из кеша и считываю состояние. И еще одна вещь, согласно моему опыту, кеш не является потокобезопасным. Так что для четырех тем я использовал четыре словаря по отдельности.