joh*_*dir 6 python web-server fastcgi lighttpd
目标是能够执行存储在 WWW 目录中的任意脚本文件,例如http://www.example.com/*.py
.
我不想为每个请求生成一个新的 Python 实例(解释器)(就像在常规 CGI 中所做的那样,如果我没记错的话),这就是我使用 FastCGI 的原因。
根据Lighttpd 的文档,以下是我的配置文件的 FastCGI 部分。问题是它总是/usr/local/bin/python-fcgi
为每个 *.py 文件运行脚本,而不管该文件的内容如何:
http://www.example.com/script.py [output=>] "python-fcgi: test"
(无论内容如何script.py
)
我对使用任何框架不感兴趣,而只是执行单独的 [web] 脚本。
我怎样才能让它像 PHP 一样运行,通过请求它的路径来执行 WWW 目录中的任何脚本?
/etc/lighttpd/conf.d/fastcgi.conf:
server.modules += ( "mod_fastcgi" )
index-file.names += ( "index.php" )
fastcgi.server = (
".php" => (
"localhost" => (
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/var/run/lighttpd/php-fastcgi.sock",
"max-procs" => 4, # default value
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "1", # default value
),
"broken-scriptfilename" => "enable"
)
),
".py" =>
(
"python-fcgi" =>
(
"socket" => "/var/run/lighttpd/fastcgi.python.socket",
"bin-path" => "/usr/local/bin/python-fcgi",
"check-local" => "disable",
"max-procs" => 1,
)
)
)
Run Code Online (Sandbox Code Playgroud)
/usr/local/bin/python-fcgi:
#!/usr/bin/python2
def myapp(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['python-fcgi: test\n']
if __name__ == '__main__':
from flup.server.fcgi import WSGIServer
WSGIServer(myapp).run()
Run Code Online (Sandbox Code Playgroud)
小智 2
PHP (FastCGI) 解释器就是为了以这种方式运行 PHP 文件而构建的;即它运行一个脚本,然后忘记它的所有内部状态,然后重新开始。
Python 并不是为此而构建的。
你可以尝试在 flup 之上构建一个解决方案;您将__import__
请求的脚本并在其中调用“handleRequest”函数或类似函数。
您可以“重新加载”模块来更新它:/sf/ask/30631261/
但是您无法卸载模块,因此内存使用量会增加:/sf/ask/217406101/