我喜欢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