是否有人使用zeromq在同一进程中协调多个Python解释器?

时间:2012-04-04 18:38:10

标签: python multithreading zeromq

我喜欢Python的全局解释器锁,因为它使底层C代码变得简单。 但这意味着每个Python解释器主循环一次仅限于一个线程。 这很糟糕,因为最近每个处理器芯片的内核数量经常翻倍。

zeromq的一个优点是它使多线程编程变得“简单”或更容易。

是否可以在同一进程中启动多个Python解释器并使它们仅使用进程内zeromq进行通信而不进行其他共享状态?有人试过吗?它运作良好吗?请评论和/或提供链接。

1 个答案:

答案 0 :(得分:4)

我不知道在单个进程中创建多个Python解释器实例的方法,但我确实有跨多个进程拆分多个实例并与zmq通信的经验。

我一直在使用multiprocessing来实现用于全局优化的岛模型架构,zmq用于管理岛之间的通信。每个岛都有自己的进程,有自己的Python解释器,由主群岛进程创建和管理。

使用multiprocessing允许您根据需要启动尽可能多的独立Python解释器,但它们都驻留在具有单独内存空间的自己的进程中。我相信OS调度程序负责将进程分配给核心并共享CPU时间。单独的内存空间是最难的部分,因为它意味着您必须明确地进行通信。要在进程之间进行通信,您希望发送的对象/数据必须是可序列化的,因为zmq发送字节字符串。

关于zmq的好处是,它可以扩展到通过网络分布的系统,它非常轻巧。您可以使用REP / REQ,PUB / SUB或其他任何方式创建您希望的任何通信模式。

但不,它并不像从threading模块中激活几个线程那么容易。

编辑:此外,这是一个类似于你的Stack Overflow问题。里面是一些更相关的链接,表明可以在一个进程中运行多个Python解释器,但它看起来并不简单。 Multiple independent embedded Python Interpreters on multiple operating system threads invoked from C/C++ program