3

我想在网络上提供一项服务,人们可以测试算法的性能,该算法是用 python 编写并在 linux 机器上运行

基本上我想做的是,有一个非常简单的 PHP 处理程序,比如说 start_algo.php,它接受来自浏览器的请求,并在 php 代码中通过 system() 或 popen() (类似于 exec(" python algo.py" ) ) 来发布一个运行python脚本的新进程,我认为这在这部分是可行的

问题是,既然它是一个网络服务,它肯定必须同时为多个用户提供服务,但我对 Global Interpreter Lock GIL http://wiki.python.org/moin/GlobalInterpreterLock 的“标准”感到很困惑' CPython 已经实现,这是否意味着,如果我现在有 3 个用户运行算法(这意味着 3 个分离的进程,如果我错了请纠正我),在特定时刻,只有一个用户正在由 Python 服务口译员和另外 2 人在等轮到他们?

提前谢谢了

泰德

4

2 回答 2

10

如果您通过调用新进程来打开每个脚本;您不会与 GIL 发生冲突。每个进程都有自己的解释器,因此也有自己的解释器锁。

于 2011-09-13T16:06:57.170 回答
7

GIL 是每个进程的。如果您启动多个python进程,每个进程都有自己的 GIL,以防止该特定进程中的解释器一次运行多个线程。但是独立的进程可以同时运行。

此外,一个 Python 进程中的多个线程确实会轮流运行(通常,IIRC 每百个操作码指令一次或几十毫秒,具体取决于版本),因此 GIL 根本不会阻止并发 - 它只是阻止-穿线。

于 2011-09-13T16:08:48.933 回答