Вы могли бы хотеть рассмотреть, насколько УСПОКОИТЕЛЬНЫЙ это?
т.е. видят, "Передают statelessly" абзац в" Введение Резюме А в REST"...
"мандаты REST, которые указывают быть или превращенными в состояние ресурса или сохраненными клиент. Другими словами, серверу не придется сохранить своего рода состояние связи ни для одного из клиентов, которыми это общается с вне единственного запроса".
(или какая-либо из других ссылок на Википедию для REST)
Так в Вашем случае, 'wave_id' является разумный Ресурс для ПОЛУЧЕНИЯ, но сделать Вас действительно хотят сохранить его на СЕССИИ? Конечно memcached является Вашим решением cacheing объектный Ресурс?
Я думаю, что message_queue
из boost :: interprocess
- это то, что вам нужно. Вторая ссылка содержит пример использования.
Вам следует взглянуть на ACE (адаптивная коммуникационная среда) и ACE_Message_Queue. Всегда есть message_queue boost, но ACE - это то, где он находится с точки зрения высокопроизводительного параллелизма.
Если вы реализуете это самостоятельно, реализация должна быть довольно простой комбинацией семафора, мьютекса и объекта очереди.
Вот некоторый псевдокод:
Produce{
pthread_mutex_lock(&mutex);
queue.push_back(someObjectReference);
pthread_mutex_unlock(&mutex);
sem_post(&availabilitySem);
}
Consume{
sem_wait(&availabilitySem);
pthread_mutex_lock(&mutex);
queue.pop_front(someObjectReference);
pthread_mutext_unlock(&mutex);
}
ОБНОВЛЕНИЕ 2016: Оказалось, что это ошибка Python по крайней мере с 2013 года, очень вероятно и раньше, заключающаяся в том, что Python плохо реагирует на локали, отличные от GNU, например те, что есть в Mac OS X и BSD. Ошибка остается открытой по состоянию на сентябрь 2016 года и затрагивает все версии Python.
Если не была установлена переменная среды LANG
, скорее всего, у вас была либо LC_CTYPE
(ключевая переменная), либо LC_ALL
(которая имеет приоритет, если установлена) переменная среды установлена на UTF-8
, что не является допустимой локалью OS X. Достаточно легко воспроизвести с помощью поставляемого Apple / usr / bin / python
или с помощью специального питона, как в вашем случае, который был построен с 10.6 SDK (вероятно, также 10.5 SDK). Вы не сможете воспроизвести это таким образом на питоне. org python; в настоящее время они построены с использованием SDK 10.4, в котором API-интерфейсы локали ведут себя по-другому.
$ unset LANG
$ env | grep LC_
$ export LC_CTYPE="UTF-8"
$ /usr/bin/python # Apple-supplied python
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 459, in getdefaultlocale
return _parse_localename(localename)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 391, in _parse_localename
raise ValueError, 'unknown locale: %s' % localename
ValueError: unknown locale: UTF-8
^D
$ /usr/local/bin/python2.6 # python.org python
Python 2.6.4 (r264:75821M, Oct 27 2009, 19:48:32)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
(None, 'mac-roman')
>>>
РЕДАКТИРОВАТЬ:
Возможно, есть еще один фрагмент головоломки. Беглый взгляд на bzr
2.0.1, который я установил, показывает, что цитируемое вами сообщение должно отображаться только в том случае, если locale.getpreferredencoding ()
вызывает ошибку locale.Error
]. Это может произойти, если расширение python _locale.so
C не может быть загружено, и это может произойти, если на нем есть проблемы с правами доступа. Например, в настоящее время известно, что MacPorts имеет проблемы с настройкой разрешений, если у вас настроена umask ; Я сам был обожжен этой проблемой. Проверьте права доступа для _locale.so
в каталоге python lib / python2.5 / lib-dynload
и убедитесь, что это 755
.
Если вы используете Windows и хотите, чтобы очередь была эффективной с точки зрения того, как она управляет потоками, которым разрешено запускать для обработки элементов из нее, тогда взгляните на порты завершения ввода-вывода (см. здесь ). Моя бесплатная серверная среда включает реализацию очереди задач, основанную на IOCP, и это также может быть интересно, если вы собираетесь пойти по этому пути; хотя, возможно, он слишком специализирован для того, что вам нужно.
Если вы используете OSX Snow Leopard, вы можете посмотреть Grand Central Dispatch .