嵌入Python线程安全

嵌入Python线程安全,python,thread-safety,multicore,embedding,embedded-language,Python,Thread Safety,Multicore,Embedding,Embedded Language,我正在尝试在一个模块中使用Python,该模块用于车辆总线系统的分析软件。为此,我必须以线程安全的方式嵌入Python,因为模块可以有多个独立工作的实例。我可以使用互斥锁来保护对Python的所有访问,并为每个线程创建一个唯一的(Python)模块。显然,这是最简单的解决方法,但代价是无法跨多个核进行扩展。或者我可以修改我的模块以产生新的进程,intern使用Python并通过共享内存连接到它们。这给了我性能上的损失,需要花费更多的时间来实现,但规模很大 我的问题:你认为巫婆一号更有意义吗?有没

我正在尝试在一个模块中使用Python,该模块用于车辆总线系统的分析软件。为此,我必须以线程安全的方式嵌入Python,因为模块可以有多个独立工作的实例。我可以使用互斥锁来保护对Python的所有访问,并为每个线程创建一个唯一的(Python)模块。显然,这是最简单的解决方法,但代价是无法跨多个核进行扩展。或者我可以修改我的模块以产生新的进程,intern使用Python并通过共享内存连接到它们。这给了我性能上的损失,需要花费更多的时间来实现,但规模很大

我的问题:你认为巫婆一号更有意义吗?有没有其他方法可以使Python线程安全地嵌入,甚至可以扩展到多个内核

向莫里茨问好


编辑:我使用的是CPython

如果您是CPU受限的,Python只能使用多处理库扩展到多核。然而,如果您是I/O绑定的,那么线程通常就足够了


如果您想要轻松的线程安全,那么使用队列进行所有消息传递

继续回答我的问题:我用intern use Python的流程实现了它。有关多处理库不起作用的原因,请参见以下内容:
这不是我自己写的,但那个家伙和我有同样的问题。我感谢所有试图帮助我的人。

多处理库真的能帮助我吗?我不使用一个Python解释器中的多个线程,我想使用多个(C++)线程中运行的多个Python解释器。多处理库可以处理产卵子过程(即它产生多个Python解释器)和进程间通信(例如数据共享、同步),这样做,避免了吉尔。(我建议在查看C++之前,在C++线程上生成多个解释器(这将复制它们在多处理库中所做的大部分)。。再说一次,我不希望Python中的sup进程,我希望,如果有的话,从C生成新的进程。那么,你是建议我研究多处理源代码?还是多处理库对我有什么帮助?我不想自大,但我看不出你的答案对我有什么帮助。在看到p之前,你已经看到了解决方案问题。python生成的子进程和C生成的子进程之间没有区别。您只需要稍微不同的任务划分方法,而不是用C划分任务,现在用python划分任务。此外,由于您是为总线编写的,请特别注意确保自libr以来您实际使用了多处理如果ary认为它不能与总线系统一起工作,它将悄悄地退回线程。这取决于您在python中所做的工作有多复杂,但在一般情况下,我认为使用多个解释器是正确的方法。它将大大提高灵活性和可伸缩性(同时让您熟悉GIL)而且您不需要每个线程的模块。我认为您的项目中的其他开发人员可以更容易地访问结果,并且更通用。您好,Jagerkin,如果您再次发布您的评论作为答案,我很可能会接受它。@Jagerkin:这正是
多处理
库所做的。在t同时,它并不像最初听起来那么简单,因为您将不得不关心进程/线程同步和线程间/进程通信。多处理库已经为您完成了大部分艰苦的工作,它有多进程版本的“队列”、“管道”、“池”、“共享值”通过IPC/共享内存透明地序列化和反序列化对象,并通过多个已处理内存进行同步的“锁定”,这样您就不必自己执行这些操作。