python 异步调用远程对象方法

python call remote object method asynchronously

我有一个 class 如下。

class R(object):
    def __init__(self, initial=0, incr=2):
        self.initial = initial
        self.incr = incr
        self.value = initial

    def add(self):
        time.sleep(1)
        self.value += self.incr

    def mul(self):
        time.sleep(3)
        self.value *= self.incr

    def get(self):
        return self.value

我想创建一个服务器来执行以下操作。

如何实现?

到目前为止我尝试了什么? 我使用 multiprocessing.Process 创建了 R 对象。然后使用 multiprocessing.Queueput_nowait.

向它发送命令

不过看来我得自己控制流量了。有没有其他框架,工具做同样的事情?

服务器是用zmq编写的,但我愿意将其更改为不同的解决方案。

Celery or Luigi 框架旨在满足您的需求。

它们旨在允许跨多个节点进行分布式计算,抽象控制流。

您通常最终要做的是专注于执行逻辑和设置工作人员。框架应该负责其余的工作。

Celery 支持多个队列后端,但我不确定 ZeroMQ 是否在其中。

在 ZeroMQ 中完全可行。


为什么要使用不合适的工具来浪费 CPU/管理费用?

ZeroMQ 允许您自适应地 spin-up 远程 worker-instances 和 load-balance / fail-safe-heal 它们的实际性能以及它们(无法)避免的静默退出。

逻辑掌握在你手中,性能不需要被任何语言或environment-driven先验蚕食

是的,你必须做流量控制,但这是你这样做的优势,而不是弱点 - 不是吗?

如果您需要获得更多性能,可以使用 ZeroMQ / or even a more lightweight & fat-free 工具。 – user3666197 17 年 11 月 2 日在 17:08