【发布时间】:2010-10-15 14:18:30
【问题描述】:
我正在尝试在模块中使用 Python 来开发车辆总线系统的分析软件。为此,我必须以线程安全的方式嵌入 Python,因为可以有多个独立工作的模块实例。我可以使用互斥锁来保护对 Python 的所有访问,并为每个线程创建一个唯一的 (python) 模块。显然这是最简单的方法,但代价是无法跨多个内核扩展。或者我可以修改我的模块以生成实习生使用 Python 并通过共享内存连接到它们的新进程。这会给我带来性能损失,并花费更多时间来实施,但扩展性很好。
我的问题:你认为女巫一更有意义吗?有没有其他方法可以嵌入 Python 线程安全,甚至可以扩展到多个内核。
向莫里茨致敬
编辑:我正在使用 CPython
【问题讨论】:
-
这取决于你在 python 中所做的事情有多复杂,但在一般情况下,我会说使用多个解释器是正确的方法。它将大大提高灵活性和可扩展性(同时让您了解 GIL)并且您不需要每个线程模块。我认为你的项目中的其他开发人员会更容易获得结果,并且更通用。
-
嗨 Jagerkin,如果您再次发表您的评论作为答案,我可能会接受。
-
@Jagerkin:这正是
multiprocessing库所做的。同时生成两个 Python 解释器并不像最初听起来那么简单,因为您必须关心进程/线程同步和线程/进程间通信。多处理库已经为您完成了大部分艰苦的工作,它具有“队列”、“管道”、“池”、“共享值”的多进程版本,可在 IPC/共享内存上透明地序列化和反序列化对象,以及“锁”同步多个处理,因此您不必自己做。
标签: python thread-safety multicore embedding embedded-language