python Global Interpreter Lock GIL问题

时间:2011-09-13 16:00:50

标签: python gil

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

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

问题是因为它是一个Web服务,当然它必须同时为多个用户服务,但我对全球解释器锁GIL http://wiki.python.org/moin/GlobalInterpreterLock感到困惑 '标准'CPython实施了, 这是否意味着,如果我现在有3个用户运行算法(这意味着3个独立的进程,如果我错了,请纠正我),在特定时刻,Python解释器只有一个用户正在服务,另外2个用户正等着轮到他们?

非常感谢提前

泰德

2 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

The GIL is per-process.如果启动多个python进程,每个进程都有自己的GIL,可以防止此特定进程中的解释器一次运行多个线程。但独立进程可以同时运行。

此外,一个Python进程内的多个线程确实轮流运行(相当频繁,IIRC每100个操作码指令一次或几十毫秒,具体取决于版本),因此它不像GIL完全阻止并发 - 它只是防止线程。