gpt4 book ai didi

python - 多处理还是多线程?

转载 作者:IT老高 更新时间:2023-10-28 22:23:57 25 4
gpt4 key购买 nike

我正在编写一个程序,用于在 Python 中运行模拟,带有 wxPython 接口(interface)。在程序中,您可以创建一个模拟,程序会为您渲染(=计算)它。渲染有时会非常耗时。

当用户开始模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中做不同的事情。有点像填满的 YouTube 风格栏:您只能播放模拟到渲染的点。

我应该使用多个进程或多个线程还是什么?人们告诉我使用 multiprocessing 包,我检查了它,它看起来不错,但我也听说进程与线程不同,不能共享很多信息(而且我认为我的程序会需要分享很多信息。)此外,我还听说过 Stackless Python:它是一个单独的选项吗?我不知道。

请指教。

最佳答案

“我查了一下,看起来不错,但我也听说进程不像线程,不能共享很多信息……”

这只是部分正确。

线程是进程的一部分——线程共享内存是微不足道的。这既是一个帮助问题,也是一个问题——两个线程随意地互相忽视可能会覆盖内存并产生严重的问题。

然而,进程通过许多机制共享信息。 Posix 管道 (a | b) 意味着进程 a 和进程 b 共享信息——a 写入它,b 读取它。这对很多事情都非常有效。

操作系统会在您创建进程后尽快将进程分配给每个可用内核。这对很多事情都非常有效。

Stackless Python 与本次讨论无关——它更快并且具有不同的线程调度。但我不认为线程是最好的途径。

“我认为我的程序需要共享大量信息。”

你应该先解决这个问题。然后,确定如何围绕信息流构建流程。一个“管道”是很容易和自然的;任何 shell 都可以轻松创建管道。

“服务器”是另一种架构,其中多个客户端进程获取和/或将信息放入中央服务器。这是共享信息的好方法。您可以使用 WSGI 引用实现来构建简单、可靠的服务器。

关于python - 多处理还是多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com