Erlang-like concurrency для Python?

Есть ли что-нибудь для Python с concurrency, например, с Erlang, особенно прозрачными участниками сетей? Я посмотрел на такие вещи, как greenlet и stackless, но у них нет прозрачности сети для участников.

Я все еще не могу преодолеть барьер Erlang/OTP, поэтому мне интересно, если что-то ближе к дому.

Ответ 1

Не совсем. Эрланг был разработан с нуля для поддержки актеров, Python не был. Самое близкое, что я думаю о том, что соответствует законопроекту, это библиотека Candygram, но даже это не совсем правильно.

Ответ 2

Вместо того чтобы пытаться сделать Python более похожим на Erlang, как сделать Erlang более похожим на Python?

Efene и Elixir - это язык компиляторы, которые производят BEAM файлы, которые могут использовать все возможности эмулятора Erlang BEAM, включая сетевое прозрачное сообщение.

Efene имеет вариант ifene, который определяет блоки с пробелами, например Python. В противном случае он больше похож на JavaScript.

Синтаксис Elixir ближе всего к Ruby.

Оба языка ближе к Python, чем к Erlang.

Ответ 3

Попробуйте Axon/Kamaelia

Он совместим с PyPy, поэтому вы получаете программирование на основе актера/потока и значительно ускоряете скорость выполнения с помощью PyPy JIT.

Ответ 4

caine, пакет, который я создал и назвал после этого парня, реализует caine.SupportingActor, удобную для пользователя модель актера для python.

По умолчанию класс caine.SupportingActor имеет следующие атрибуты/функции:

  • inbox: управляемая очередь. Сообщения передаются актеру так, foo.inbox.put('bar').
  • timeout: разрешенное количество секунд между приемами сообщений до истечения времени ожидания.
  • receive: функция, выполняемая с использованием сообщений из папки "Входящие", требует выполнения.
  • handle: функция, выполняемая при возникновении исключения.
  • callback: функция, выполняемая при завершении обработки.
  • cut: завершает обработку при вызове.

Кроме того, класс caine.SupportingCast наследует все функции caine.SupportingActor, позволяя указанному количеству участников каждого сообщения процесса из одного и того же почтового ящика без дублирования.

Ответ 5

Это не действительно concurrency, но Celery может дать вам что-то, что вам нужно, с точки зрения распределения нагрузки на нагрузку сеть.

Ответ 6

См. Pykka. Я не уверен, как он обрабатывает ошибки.

Ответ 7

Также для некоторых из этих функций см. пикс-код без стекол.