Чистая, легкая альтернатива Python скрутила? [закрытый]

Ctrl + Высокий звук + P -> Присоединение для обработки

219
задан Community 23 May 2017 в 01:47
поделиться

10 ответов

Мне понравился модуль Python concurrence , который полагается на микропотоки Python без стека или Greenlets для облегчения потоковой передачи. Весь блокирующий сетевой ввод-вывод прозрачно делается асинхронным с помощью одного цикла libevent , поэтому он должен быть почти таким же эффективным, как настоящий асинхронный сервер.

Я полагаю, что в этом отношении он похож на Eventlet.

] Обратной стороной является то, что его API сильно отличается от модулей Python сокетов / потоков ; вам нужно немного переписать свое приложение (или написать слой прокладки совместимости)

Изменить: Похоже, есть также cogen , который похож, но использует Python 2.5 усовершенствовал генераторы для своих сопрограмм вместо Greenlets. Это делает его более портативным, чем согласование и другие альтернативы. Сетевой ввод-вывод выполняется напрямую с помощью epoll / kqueue / iocp.

27
ответ дан 23 November 2019 в 04:10
поделиться

Ни одно из этих решений не сможет избежать того факта, что GIL предотвращает параллелизм ЦП - это просто лучшие способы обеспечения параллелизма ввода-вывода, который у вас уже есть с потоками. Если вы думаете, что можете улучшить ввод-вывод, непременно выполните одно из них, но если ваше узкое место связано с обработкой результатов, здесь ничего не поможет, кроме модуля многопроцессорности.

15
ответ дан 23 November 2019 в 04:10
поделиться

Twisted сложен, в этом вы правы. Twisted не раздутый.

Если вы посмотрите здесь: http://twistedmatrix.com/trac/browser/trunk/twisted , вы найдете организованный, всеобъемлющий и очень хорошо протестированный набор из множества протоколы Интернета, а также вспомогательный код для написания и развертывания очень сложных сетевых приложений. Я бы не стал путать раздувание с полнотой.

Хорошо известно, что документация Twisted на первый взгляд не самая удобная для пользователя, и я считаю, что это отпугивает большое количество людей. Но Twisted потрясающий (IMHO), если потратить время. Я сделал это, и это того стоило, и я рекомендую другим попробовать то же самое.

99
ответ дан 23 November 2019 в 04:10
поделиться

Камаэлия еще не упоминалась. Его модель параллелизма основана на соединении компонентов с передачей сообщений между ящиками входящих и исходящих. Вот краткий обзор.

7
ответ дан 23 November 2019 в 04:10
поделиться

gevent eventlet очищен .

С точки зрения API он следует тем же соглашениям, что и стандартная библиотека (в частности, модули потоковой и многопроцессорной обработки), где это имеет смысл. Итак, у вас есть знакомые вещи, такие как Queue и Event , с которыми можно работать.

Он поддерживает только libevent ( обновление: libev с 1.0 ) в качестве реализации реактора, но в полной мере использует его преимущества, показывая быстрый сервер WSGI на основе libevent-http и разрешающий запросы DNS через libevent-dns, в отличие от использования пула потоков, как это делает большинство других библиотек. ( обновление: , поскольку 1.0 c-ares используется для выполнения асинхронных DNS-запросов;

56
ответ дан 23 November 2019 в 04:10
поделиться

Я бы не стал называть Twisted раздутым, но это сложно осмыслить. Я довольно долго избегал по-настоящему осваивать обучение, поскольку мне всегда хотелось чего-то более простого для «небольших задач».

Однако теперь, когда я поработал с ним еще немного, я должен сказать, что наличие всех включенных батарей - это ОЧЕНЬ приятно.

Все другие асинхронные библиотеки, с которыми я работал, оказались намного менее зрелыми, чем они даже кажутся. Цикл событий Twisted прочный.

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

11
ответ дан 23 November 2019 в 04:10
поделиться

Есть хорошая книга на эту тему: "Twisted Network Programming Essentials", автор Abe Fettig. Примеры показывают, как писать очень Pythonic код, и лично мне не кажутся основанными на раздутом фреймворке. Посмотрите на решения в книге, если они не чистые, то я не знаю, что значит "чистые".

Моя единственная загадка - та же, что и с другими фреймворками, например, Ruby. Я беспокоюсь, будет ли он масштабироваться? Я бы не хотел посвящать клиента во фреймворк, у которого будут проблемы с масштабируемостью.

4
ответ дан 23 November 2019 в 04:10
поделиться

Также попробуйте Syncless . Он основан на сопрограммах (поэтому он похож на Concurrence, Eventlet и gevent). Он реализует неблокирующие замены для socket.socket, socket.gethostbyname (и т. Д.), Ssl.SSLSocket, time.sleep и select.select. Это быстро. Ему нужны Stackless Python и libevent. Он содержит обязательное расширение Python, написанное на C (Pyrex / Cython).

2
ответ дан 23 November 2019 в 04:10
поделиться

Я начал использовать twisted для некоторых вещей. Прелесть его почти в том, что он "раздутый". Есть коннекторы практически для любого из основных протоколов. Вы можете иметь jabber-бота, который будет принимать команды и отправлять их на сервер irc, посылать их кому-то по электронной почте, выполнять команду, читать с сервера NNTP и следить за изменениями на веб-странице. Плохая новость заключается в том, что он может делать все это и может сделать вещи чрезмерно сложными для простых задач, как объяснил ОП. Преимущество python в том, что вы включаете только то, что вам нужно. Поэтому, хотя загрузка может быть 20мб, вы можете включить только 2мб библиотек (что все равно много). Моя самая большая претензия к twisted в том, что хотя они и включают примеры, все, что выходит за рамки базового tcp-сервера, вы делаете сами.

Хотя это и не решение на Python, я заметил, что node.js в последнее время набирает все большую популярность. На самом деле я рассматривал его для небольших проектов, но меня просто коробит, когда я слышу javascript :)

.
7
ответ дан 23 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

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