python Global Interpreter Lock GIL问题

Ted*_* Xu 3 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人正在等待轮到他们?

提前谢谢了

摊晒

Sin*_*ion 10

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


小智 6

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

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