我想在网上提供一个人们可以测试算法性能的服务,这个算法用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个用户正等着轮到他们?
非常感谢提前
泰德
答案 0 :(得分:10)
如果要通过调用新进程打开每个脚本;你不会与GIL发生冲突。每个进程都有自己的解释器,因此也有自己的解释器锁。
答案 1 :(得分:6)
The GIL is per-process.如果启动多个python
进程,每个进程都有自己的GIL,可以防止此特定进程中的解释器一次运行多个线程。但独立进程可以同时运行。
此外,一个Python进程内的多个线程确实轮流运行(相当频繁,IIRC每100个操作码指令一次或几十毫秒,具体取决于版本),因此它不像GIL完全阻止并发 - 它只是防止多线程。