2009-07-11 2 views
3

Я изучал разные системы для создания быстрого кеша в веб-ферме, на которой запущен Python/mod_wsgi. Memcache и другие варианты ... Но мне было интересно:Глобальные данные сервера Python/mod_wsgi

Потому что мне не нужно обмениваться данными между машинами, желая каждую машину, чтобы поддерживать локальный кэш ...

ли Python или WSGI обеспечивают механизм для родных общих данных Python в Apache, чтобы данные сохранялись и доступны для всех потоков/процессов до перезапуска сервера? Таким образом, я мог бы просто хранить кеш объектов с контролем параллелизма в пространстве памяти всех запущенных экземпляров приложений?

Если нет, то он уверен, было бы полезно

Спасибо!

ответ

1

Существует встроенный в Django потоковый кеш-память в памяти, см. here. Это cPickle-based, и хотя он разработан для использования с Django, он имеет минимальные зависимости от остальной части Django, и вы можете легко реорганизовать его, чтобы удалить их. Очевидно, что каждый процесс получит свой собственный кеш, разделенный между его потоками; Если вы хотите, чтобы кэш был общим для всех процессов на одном компьютере, вы могли бы просто использовать этот кеш в своем собственном процессе с выбранным вами IPC-интерфейсом (например, сокеты домена) или использовать memcached локально или, если вы когда-либо захотите настойчивость через перезагрузки, что-то вроде Tokyo Cabinet с интерфейсом Python, например this.

+0

+1 ... Выглядит хорошо, не cPickle предполагается, что он довольно медленный? –

+0

Возможно, легко встать и запустить, поэтому вы можете сравнить его и посмотреть, соответствует ли он вашим потребностям. Очевидно, что если это все Python-to-Python в одном и том же процессе, то вам вообще не нужно документировать записи сериализации - тогда он просто действует как большой dict с политикой истечения срока действия кэша. –

+0

Ах, да, всего лишь серверный дикт - это то, что Im после действительно –

2

Это полностью покрыто документацией Sharing and Global Data section документации mod_wsgi. Короткий ответ: Нет, если вы не запускаете все в одном процессе, но это не идеальное решение.

Следует отметить, что caching is ridiculously easy to do with Beaker middleware, который поддерживает несколько бэкэндов, включая memcache.

+0

+1 ... Выглядит интересно, заглянет –

0

Я понимаю, что это старый поток, но вот еще один вариант для «server-wide dict»: http://poshmodule.sourceforge.net/posh/html/posh.html (POSH, Python Shared Objects). Отказ от ответственности: еще не использовал его.

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