Запись основанного на сокете сервера в Python, рекомендуемом стратегии?

Если вы удалите скомпилированный макрос из WORK. SASMACR SAS придется перекомпилировать макрос при повторном вызове.

proc catalog c=work.sasmacr;
   *contents;
   delete your-macro-to-recompile.macro;
   run;
   quit;
9
задан vartec 11 March 2009 в 16:33
поделиться

6 ответов

asyncore в основном "1" - Это использует select внутренне, и у Вас просто есть один поток, обрабатывающий все запросы. Согласно документам это может также использовать poll. (РЕДАКТИРОВАНИЕ: Удаленная Скрученная ссылка, я думал, что она использовала asyncore, но я был неправ).

"2" мог бы быть реализован с python-epoll (Просто погуглил его - никогда не замечаемый он прежде).Править: (из комментариев) В python 2.6 избранный модуль имеет epoll, kqueue и сборку kevent - в (на поддерживаемых платформах). Таким образом, Вам не нужны никакие внешние библиотеки, чтобы сделать инициированное фронтом сигнала обслуживание.

Не исключайте "4", поскольку GIL будет отброшен, когда поток на самом деле сделает или ожидает IO-операций (большую часть времени, вероятно). Это не имеет смысла, если у Вас есть огромные числа соединений, конечно. Если у Вас есть большая обработка, чтобы сделать, то Python не может иметь смысла ни с одной из этих схем.

Поскольку гибкость, возможно, смотрит на Скрученный?

На практике Ваша проблема сводится к тому, сколько обработки Вы собираетесь сделать для запросов. Если Вы будете иметь большую обработку и должны будете использовать в своих интересах многоядерную параллельную операцию, то Вам, вероятно, будут нужны несколько процессов. С другой стороны, если просто необходимо послушать на большом количестве соединений, затем выберите, или epoll, с небольшим количеством потоков должен работать.

7
ответ дан 4 December 2019 в 12:21
поделиться

Как насчет "ветвления"? (Я принимаю то, именно это ForkingMixIn делает), Если запросы обработаны в "общий ничто" (кроме DB или файловой системы) архитектура, ветвление () запускается довольно быстро на большинстве *, отклоняет, и Вы не должны волноваться обо всех глупых ошибках и сложностях от поточной обработки.

Потоки являются болезнью дизайна, вызванной на нас Ose с процессами too-heavy-weight, по моему скромному мнению. Клонирование таблицы страниц с атрибутами копии на записи кажется маленькой ценой, особенно при выполнении интерпретатора так или иначе.

Извините я не могу быть более конкретным, но я - больше Perl-transitioning-to-Ruby программиста (когда я не работаю в качестве ведомого устройства по массам Java на работе),


Обновление: Я наконец сделал некоторые синхронизации на потоке по сравнению с, подцепляют мое "свободное время" на вилку.Попробуйте:

http://roboprogs.com/devel/2009.04.html

Расширенный: http://roboprogs.com/devel/2009.12.html

3
ответ дан 4 December 2019 в 12:21
поделиться

Я могу предложить дополнительные ссылки?

cogen является межплатформенной библиотекой для ориентированной сети, основанное на сопрограмме программирование с помощью расширенных генераторов от python 2.5. На основной странице cogen проекта существуют ссылки на несколько проектов с подобной целью.

2
ответ дан 4 December 2019 в 12:21
поделиться

Мне нравится ответ Douglas, но как в стороне...

Вы могли использовать централизованный поток/процесс отправки, который прислушивается к использованию уведомлений о готовности select и делегаты в объединении рабочего распараллеливают/обрабатывают, чтобы помочь выполнить Ваши цели параллелизма.

Как Douglas упомянул, однако, GIL не будет сохранен во время большинства долгих операций ввода-вывода (так как никакие вещи Python-API не происходят), поэтому если это - задержка ответа, Вы обеспокоены Вами, может попытаться переместить критические части Вашего кода к API CPython.

1
ответ дан 4 December 2019 в 12:21
поделиться

http://docs.python.org/library/socketserver.html#asynchronous-mixins

Что касается многопроцессорных (многоядерных) машин. С CPython из-за GIL Вам будет нужен по крайней мере один процесс на ядро, для масштабирования. Поскольку Вы говорите необходимость в CPython Вы могли бы попытаться сравнить этого с ForkingMixIn. С Linux 2.6 мог бы дать некоторые интересные результаты.

Другой путь состоит в том, чтобы использовать Stackless Python. Это - то, как EVE решила его. Но я понимаю, что это не всегда возможно.

1
ответ дан 4 December 2019 в 12:21
поделиться

Одна проблема - gevent. Gevent сочетает опрос событий на основе libevent с легковесным кооперативным переключением задач, реализованным greenlet.

Вы получаете всю производительность и масштабируемость событийной системы с элегантностью и простой моделью программирования блокирующего ввода-вывода.

(Я не знаю, как принято в SO отвечать на действительно старые вопросы, но решил добавить свои 2 цента)

.
3
ответ дан 4 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: