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

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

zeromq的一个假定优点是它使多线程编程“简单”或更容易.

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

解决方法:

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

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

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

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

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

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

上一篇:BZOJ 2502: 清理雪道 [最小流]


下一篇:java-ZeroMQ多线程:按需创建套接字还是使用套接字对象池?