Erlang-подобный параллелизм для Python? - PullRequest
11 голосов
/ 02 апреля 2011

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

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

Ответы [ 7 ]

7 голосов
/ 02 апреля 2011

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

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

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

Синтаксис Elixir наиболее близок к Ruby.

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

3 голосов
/ 02 апреля 2011

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

2 голосов
/ 06 сентября 2011

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

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

1 голос
/ 25 августа 2014

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

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

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

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

0 голосов
/ 21 декабря 2012

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

0 голосов
/ 06 сентября 2011

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

0 голосов
/ 02 апреля 2011

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

...