Является ли сессия Django потокобезопасной?

Я храню словарь в Django Session, который доступен нескольким потокам. Все потоки могут обновлять этот словарь, потоки также получают значения из словаря, чтобы запустить процесс. Я хочу знать, является ли сессия 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 различных ссылок. Почему я использую потоки? Потому что я хочу показать пользователю, какие образцы загружаются в данный момент, а какие остались. Все потоки будут обновлять свое состояние в словаре внутри сессии. После запуска потоков я делаю ajax запрос через каждые две секунды и беру словарь из сессии и читаю текущее состояние потоков. Но эта идея не удалась, потому что потоки не зависят от запроса и своей сессии. Каждый ajax запрос определенно имеет свою сессию, но я не могу передать эту сессию потокам, потому что когда они начинаются, они не зависят от остального мира (может быть я могу передать ее, но я могу не передать ее так быстро, как обработка выполняется потоками). поэтому для решения этой проблемы я выбрал фреймворк кэша вместо сессии. так как кэш доступен из любого места. Потоки хранят свое состояние в словаре и помещают обратно в кэш, а через каждые две секунды я беру словарь из кэша и читаю состояние. И еще одна вещь, согласно моему опыту, кэш не является потокобезопасным. Поэтому для четырех потоков я использовал четыре словаря по отдельности.

9
задан dsolimano 2 June 2012 в 04:43
поделиться