首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python编程

Python编程
EN

Stack Overflow用户
提问于 2009-02-24 09:15:24
回答 5查看 2.4K关注 0票数 12

早上好。

正如标题所示,我有一些关于使用python进行web开发的问题。

  • 开发环境的最佳设置是什么,更具体地说,使用什么with服务器,如何将python与其绑定。最好,我希望它在两个环境中都可以实现,*nix和win环境。

上一次尝试apache + mod_python + CherryPy时,我主要关心的是必须重新加载webserver来查看更改。这算正常吗?由于某种原因,cherrypy的自动重新装载根本不起作用。

  • 将Python应用程序部署到生产中的最佳设置是什么?为什么?我现在在我的PHP web应用程序中使用了lighttpd,但是与nginx相比,它对python有什么作用呢?
  • 是值得用一个框架直接跳下去呢,还是用我自己的一些简单的东西?我看到Django有很多粉丝,但我认为这对我的需求来说太过分了,所以我开始研究CherryPy。
  • 如果我必须重新加载httpd来查看更改,Python应用程序究竟提供了哪些服务?类似于生成子进程的永久进程,所有的主要文件包括在服务器启动时发生,然后只是延迟加载所需的资源?
  • Python支持多线程,在开发web应用程序时,我需要考虑使用它来获得好处吗?这会有什么好处,在什么情况下?

非常感谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-02-24 09:26:54

以下是我对此的看法:

我正在使用Python糊开发我的应用程序,并最终运行它(或任何其他python服务器)。我通常不使用mod_python或mod_wsgi,因为这会使开发设置更加复杂。

我使用zc.buildout维塔列夫一起管理我的开发环境和所有依赖关系。这给了我一个独立的沙箱,它不会干扰在系统范围内安装的任何Python模块。

对于部署,我还使用了buildout/virtualenv,最终使用了不同的buildout.cfg。我还使用了粘贴部署及其配置机制,其中我有不同的配置文件用于开发和部署。

由于我通常运行粘贴/cherrypy等独立的,我使用Apache,NGINX或可能只是清漆单独在前面。这取决于您需要什么样的配置选项。如果不需要虚拟主机,重写规则等,那么我不需要一个功能齐全的web服务器在前面。在使用web服务器时,我通常使用ProxyPass或使用mod_rewrite进行更复杂的重写。

我目前使用的Python框架是repoze.bfg

至于您关于重新加载的问题,我知道在使用例如mod_python运行它时会遇到这些问题,但是当使用独立的“粘贴服务. -reload”等时,到目前为止,它工作得很好。此外,repoze.bfg还设置了一些设置,用于在模板更改时自动重新加载它们。如果您使用的框架具有,则应该记录在案。

至于多线程,通常是在python服务器中使用的。由于CherryPy支持这一点--我想您不必担心这一点,应该自动使用它。您应该最终做出一些基准测试,以找出应用程序执行得最好的线程数。

希望这能有所帮助。

票数 6
EN

Stack Overflow用户

发布于 2009-02-24 11:05:43

开发环境的最佳设置是什么?

没什么大不了的。我们使用Django,它很好地运行在Windows和Unix中。在生产中,我们在Red中使用Apache。

必须重新加载webserver才能看到被视为正常的更改?

是。不知道你为什么想要不同的东西。Web应用软件不应该是动态的。内容是的。软件编号。

在Django中,我们开发时不使用桌面上任何类型的web服务器。Django "runserver“命令在大多数情况下重新加载应用程序。对于发展来说,这是非常有用的。当它不能重新加载的时候,我们已经严重损坏了东西,以致于应用程序不能正常运行。

什么是最好的设置来部署一个工作的Python到生产,为什么?

在这种情况下,“最佳”一词没有定义。因此,请为“巢”(如“最快”、“最便宜”、“最蓝”)提供一些限定条件。

是值得用一个框架直接跳下去还是用我自己的一些简单的东西呢?

不要浪费时间滚动你自己。我们使用Django是因为我们不需要编写或维护内置的管理页面。节省了大量的工作。

如果我必须重新加载httpd来查看更改,应用程序是如何服务的呢?

两种方法:

  • Daemon - mod_wsgi或mod_fastcgi有一个它们连接到的Python守护进程。改变你的软件。重新启动守护进程。
  • Embedded - mod_wsgi或mod_python有一种嵌入式模式,在这种模式下,Python解释器在mod内部,在Apache中。您必须重新启动httpd才能重新启动该嵌入式解释器。

我需要研究如何使用多线程吗?

是也不是。是的,你确实需要知道这一点。不,你不需要做很多事。Apache、mod_wsgi和Django应该为您处理这个问题。

票数 8
EN

Stack Overflow用户

发布于 2009-02-24 09:54:17

+1回答MrTopf先生的问题,但我要补充一些意见。

Webserver服务器

Apache是给您提供最可配置性的you服务器。避免使用mod_python,因为它基本上不受支持。另一方面,wsgi得到了很好的支持,并为您提供了更好的稳定性(换句话说,相对于螺旋键和不可预见性,cpu/内存的使用更容易配置为稳定)。

另一个巨大的好处是,如果触及wsgi应用程序脚本,您可以配置mod_wsgi来重新加载应用程序,而无需重新启动Apache。对于开发/测试服务器,您甚至可以配置mod_wsgi,以便在更改应用程序中的任何文件时重新加载。在开发过程中,这是非常有用的,我甚至在笔记本电脑上运行Apache+mod_wsgi。

Nginx和lighttpd通常用于yet服务器,直接通过fastCGI接口为Python应用程序提供服务(目前还不用在这些服务器上使用任何WSGI接口),或者将它们用作Apache前面的前端。对应用程序的调用(通过代理)传递给Apache+mod_wsgi,然后nginx/lighttpd直接服务静态内容。

Nginx的另一个优势是,如果您想获得如此复杂的内容,可以直接从memcached提供内容。我听过一些关于lighttpd的轻蔑评论,它似乎确实存在一些开发问题,但是肯定有一些大公司成功地使用了它。

Python堆栈

在最低级别,您可以直接编程到WSGI,以获得最佳性能。有很多有用的WSGI模块,可以在你不想自己开发的领域帮助你。在这个级别上,您可能希望选择第三方的WSGI组件来进行URL解析和HTTP请求/响应处理。WebOb是一个很好的请求/响应组件。

如果您查看塔架,您可以看到他们的“最佳品种”WSGI组件的想法,以及一个比Django更容易选择自己的组件(如模板引擎)的框架。

Django可能有点过分,但我不认为这是一个很好的理由。Django使简单的事情变得更容易。当您开始进入非常复杂的应用程序时,您真正需要考虑的是迁移到更低级别的框架。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/581038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档