【问题标题】:Erlang-like concurrency for Python?Python 的类似 Erlang 的并发?
【发布时间】:2011-07-28 00:45:24
【问题描述】:

Python 有没有像 Erlang 那样具有并发性的东西,特别是网络上的透明参与者?我看过greenletstackless 之类的东西,但它们似乎没有演员的网络透明度。

我仍然不能完全跳过 Erlang/OTP 的障碍,所以我很感兴趣是否有更接近我家的东西。

【问题讨论】:

  • 你能详细说明你想要达到的目标吗?
  • @jathanism 简而言之,跨多个节点的参与者的水平可扩展性。
  • Python 甚至在多核上都没有解释器并发,是什么让你认为它会在多台联网机器上实现?
  • @Amber multiprocessing 和管道救援?
  • 我只能推荐“越过障碍”。学习 Erlang 很有趣,学习新的编程语言总是很有趣,而且对于获得新见解非常有用——养成每年学习一门新语言的习惯——我第一次在一个实际项目中使用 Erlang Erlang 为我带来的最后期限和提高的生产力值得花时间学习——没有错过我的最后期限:-)

标签: python concurrency erlang python-stackless greenlets


【解决方案1】:

caine,一个我创建并以this guy 命名的包,实现了caine.SupportingActor,一个用户友好的python 并发actor模型。

默认情况下,caine.SupportingActor 类具有以下属性/功能:

  • inbox :托管队列。消息像这样传递给演员,foo.inbox.put('bar')
  • timeout :在超时之前允许的消息接收之间的秒数。
  • receive :使用收件箱中的消息执行的功能,需要实现。
  • handle :引发异常时执行的函数。
  • callback :处理完成时执行的函数。
  • cut :调用时结束处理。

此外,caine.SupportingCast 类继承了caine.SupportingActor 的所有功能,同时允许指定数量的参与者处理来自同一个收件箱的消息而不会重复。

【讨论】:

    【解决方案2】:

    与其尝试让 Python 更像 Erlang,不如让 Erlang 更像 Python?

    EfeneElixir 是生成 BEAM 文件的语言编译器,这些文件可以利用 Erlang BEAM 仿真器的所有功能,包括网络透明的消息传递。

    Efene 有一个“ifene”变体,它定义了带有空格的块,例如 Python。否则,它与 JavaScript 最相似。

    Elixir 语法最接近 Ruby。

    这两种语言都比 Erlang 更接近 Python。

    【讨论】:

    • 我看过这些,但它们看起来还不够成熟,无法用于生产......
    【解决方案3】:

    Pykka。我不确定它如何处理错误。

    【讨论】:

      【解决方案4】:

      这不是真正的并发,但Celery 可能会为您提供一些您正在寻找的东西,在网络上分配任务负载方面。

      【讨论】:

        【解决方案5】:

        试试 Axon / Kamaelia

        它与 PyPy 兼容,因此您可以通过 PyPy 的 JIT 获得基于 actor/flow 的编程和显着加快的执行速度。

        【讨论】:

          【解决方案6】:

          对于其中一些功能,请参阅 stackless python。

          【讨论】:

            【解决方案7】:

            不是真的。 Erlang 的设计初衷就是支持演员,而 Python 不是。我能想到的最符合要求的是 Candygram 库,但即使这样也不完全正确。

            【讨论】:

            • 老实说,我不喜欢 Candygram 使用繁重的操作系统线程的方式。
            • 可以重写它以使用绿色线程和多处理。使用 OS 线程是因为在首次编写时没有可行的替代方案。重点是它至少实现了并发原语。
            • 重要的是要注意,Erlang 不是旨在支持“演员”。它顺便实现了一个与演员非常相似的模型。
            猜你喜欢
            • 2018-02-15
            • 2021-05-22
            • 2021-05-27
            • 2021-05-26
            • 2017-09-02
            • 2016-01-15
            • 2018-08-10
            • 2012-10-27
            • 1970-01-01
            相关资源
            最近更新 更多