我喜欢 Python 的全局解释器锁,因为它使底层 C 代码变得简单。但这意味着每个 Python 解释器主循环一次仅限于一个线程。这很糟糕,因为最近每个处理器芯片的内核数量经常翻倍。
zeromq 的假定优势之一是它使多线程编程“容易”或更容易。
是否可以在同一进程中启动多个 Python 解释器并让它们仅使用进程内 zeromq 进行通信,而没有其他共享状态?有人试过吗?它运作良好吗?请评论和/或提供链接。
我喜欢 Python 的全局解释器锁,因为它使底层 C 代码变得简单。但这意味着每个 Python 解释器主循环一次仅限于一个线程。这很糟糕,因为最近每个处理器芯片的内核数量经常翻倍。
zeromq 的假定优势之一是它使多线程编程“容易”或更容易。
是否可以在同一进程中启动多个 Python 解释器并让它们仅使用进程内 zeromq 进行通信,而没有其他共享状态?有人试过吗?它运作良好吗?请评论和/或提供链接。
我不知道有什么方法可以在单个进程中创建 Python 解释器的多个实例,但我确实有跨多个进程拆分多个实例并与zmq
.
我一直在使用multiprocessing
实现全局优化的岛模型架构,zmq
用于管理岛之间的通信。每个岛都有自己的进程,有自己的 Python 解释器,由主群岛进程创建和管理。
Usingmultiprocessing
允许您启动任意数量的独立 Python 解释器,但它们都驻留在自己的进程中,并具有单独的内存空间。我相信操作系统调度程序负责将进程分配给内核并共享 CPU 时间。单独的内存空间是最难的部分,因为这意味着您必须明确地进行通信。要在进程之间进行通信,您希望发送的对象/数据必须是可序列化的,因为zmq
发送的是字节串。
好处zmq
是,跨网络分布式系统扩展是小菜一碟,而且非常轻量级。您可以使用 REP/REQ、PUB/SUB 或其他任何方式创建您想要的任何通信模式。
但是不,这不像从threading
模块中启动几个线程那么容易。
编辑:另外,这是一个类似于你的 Stack Overflow 问题。里面有一些更相关的链接,表明可以在单个进程中运行多个 Python 解释器,但这看起来并不简单。 从 C/C++ 程序调用的多个操作系统线程上的多个独立嵌入式 Python 解释器