12

おはようございます。

タイトルが示すように、Web 開発に Python を使用することについていくつか質問があります。

  • 開発環境に最適なセットアップは何ですか。より具体的には、どの Web サーバーを使用するか、それに Python をバインドする方法です。できれば、* nix と win 環境の両方で実装できるようにしたいと思います。

最後に apache + mod_python + CherryPy を試したときの私の主な懸念は、変更を確認するために Web サーバーをリロードする必要があることでした。それは正常と見なされますか?何らかの理由で、cherrypy の自動リロードがまったく機能しませんでした。

  • 動作中の Python アプリを本番環境にデプロイするための最適な設定とその理由は何ですか? 現在、PHP Web アプリケーションに lighttpd を使用していますが、たとえば nginx と比較して Python ではどのように機能しますか?

  • フレームワークでまっすぐに飛び込む価値がありますか、それとも私自身の単純なものを転がす価値がありますか? Django にはかなり多くのファンがいることがわかりましたが、私のニーズに対してはやり過ぎだと思ったので、CherryPy を調べ始めました。

  • 変更を確認するために httpd をリロードする必要がある場合、Python アプリはどのように提供されますか? 子プロセスを生成する永続的なプロセスのようなもので、サーバーの起動時にすべての主要なファイルが含まれ、必要なリソースを遅延ロードするだけですか?

  • Python はマルチスレッドをサポートしていますが、Web アプリを開発する際にメリットを得るためにマルチスレッドの使用を検討する必要がありますか? どのような状況で、どのようなメリットがあるのでしょうか?

本当にありがとう!

4

5 に答える 5

8

開発環境に最適なセットアップは何ですか?

あまり関係ありません。Windows と Unix で問題なく動作する Django を使用しています。本番環境では、Red Hat の Apache を使用しています。

通常と見なされる変更を確認するために Web サーバーをリロードする必要がありますか?

はい。なぜ違うものが欲しいのか明確ではありません。Web アプリケーション ソフトウェアは動的であってはなりません。内容 はい。ソフトウェア番号

Django では、デスクトップ上でいかなる種類の Web サーバーも使用せずに開発を行います。Django の「runserver」コマンドは、ほとんどの状況でアプリケーションをリロードします。開発の場合、これはうまく機能します。リロードしないのは、アプリが正常に機能しないほどひどく破損した場合です。

動作中の Python アプリを本番環境にデプロイするための最適な設定とその理由は何ですか?

このコンテキストでは、「最高」は定義されていません。したがって、「ネスト」の条件を指定してください (例: 「最速」、「最安」、「最も青い」)。

フレームワークでまっすぐに飛び込む価値がありますか、それとも私自身の単純なものを転がす価値がありますか?

時間を無駄にしないでください。Django を使用しているのは、組み込みの管理ページを作成または管理する必要がないためです。山のような作業を節約します。

変更を確認するために httpd をリロードする必要がある場合、Python アプリはどのように提供されますか?

2 つの方法:

  • デーモン - mod_wsgi または mod_fastcgi には、接続先の Python デーモン プロセスがあります。ソフトウェアを変更します。デーモンを再起動します。

  • 埋め込み - mod_wsgi または mod_python には、Python インタープリターが mod 内、Apache 内にある埋め込みモードがあります。その埋め込みインタープリターを再起動するには、httpd を再起動する必要があります。

マルチスレッドの使用を検討する必要がありますか?

はいといいえ。はい、これを認識する必要があります。いいえ、多くのことをする必要はありません。Apache と mod_wsgi と Django がこれを処理するはずです。

于 2009-02-24T11:05:43.043 に答える
6

MrTopfの回答に+1しますが、いくつか意見を追加します。

Webサーバー

Apacheは、最も構成しやすいWebサーバーです。mod_pythonは基本的にサポートされていないため、避けてください。一方、mod_wsgiは非常によくサポートされており、安定性が向上します(つまり、CPU /メモリの使用量が急上昇して予測できないのではなく、安定するように構成するのが簡単になります)。

もう1つの大きな利点は、wsgiアプリケーションスクリプトに触れた場合にアプリケーションをリロードするようにmod_wsgiを設定できることです。これにより、Apacheを再起動する必要がなくなります。開発/テストサーバーの場合、アプリケーション内のファイルが変更されたときにリロードするようにmod_wsgiを構成することもできます。これは非常に役立ち、開発中にラップトップでApache+mod_wsgiを実行することもできます。

Nginxとlighttpdは、一般的にWebサーバーで使用されます。PythonアプリをfastCGIインターフェイスを介して直接提供するか(これらのサーバーのWSGIインターフェイスはまだ気にしないでください)、Apacheの前のフロントエンドとして使用します。アプリへの呼び出しは(プロキシによって)Apache + mod_wsgiに渡され、nginx/lighttpdは静的コンテンツを直接提供します。

Nginxには、洗練されたものにしたい場合にmemcachedから直接コンテンツを提供できるという追加の利点があります。lighttpdについて軽蔑的なコメントを聞いたことがあり、開発上の問題があるようですが、確かに大企業の中にはそれをうまく利用しているところもあります。

Pythonスタック

最も低いレベルでは、最高のパフォーマンスを得るためにWSGIに直接プログラムできます。自分で開発したくない分野で役立つWSGIモジュールがたくさんあります。このレベルでは、URL解決やHTTP要求/応答処理などを行うために、サードパーティのWSGIコンポーネントを選択することをお勧めします。優れた要求/応答コンポーネントはWebObです。

Pylonsを見ると、「最高の」WSGIコンポーネントのアイデアと、Djangoよりもテンプレートエンジンなどの独自のコンポーネントを簡単に選択できるフレームワークがわかります。

Djangoはやり過ぎかもしれませんが、それは本当に良い議論ではないと思います。Djangoを使用すると、簡単な作業が簡単になります。非常に複雑なアプリケーションに取り掛かるときは、低レベルのフレームワークへの移行を実際に検討する必要があります。

于 2009-02-24T09:54:17.473 に答える
6

だからここにそれについての私の考えがあります:

私は自分のアプリを開発するためにPython Pasteを使用しており、最終的にはそれを実行しています(または他のPython Webサーバー)。mod_python や mod_wsgi を使用すると、開発のセットアップがより複雑になるため、通常は使用しません。

開発環境とすべての依存関係をvirtualenvと共に管理するためにzc.buildoutを使用しています。これにより、システム全体にインストールされている Python モジュールに干渉しない分離されたサンドボックスが得られます。

展開には、buildout/virtualenv も使用していますが、最終的には別の buildout.cfg を使用します。Paste Deployも使用しています。これは、開発用と展開用に異なる構成ファイルを持つ構成メカニズムです。

私は通常、paste/cherrypy などをスタンドアロンで実行しているため、Apache、NGINX、またはその前にワニスだけを使用しています。必要な構成オプションによって異なります。たとえば、仮想ホスティングや書き換えルールなどが必要ない場合、フル機能の Web サーバーは必要ありません。Web サーバーを使用する場合、通常は ProxyPass を使用するか、mod_rewrite を使用したより複雑な書き換えを使用します。

私が現在使用している Python Web フレームワークは、repoze.bfgです。

リロードに関するご質問については、mod_python などで実行する場合のこれらの問題については承知していますが、スタンドアロンの「paster serve ... -reload」などを使用する場合は、これまでのところ非常にうまく機能しています。repoze.bfg には、テンプレートが変更されたときにテンプレートを自動的にリロードするための設定もあります。使用しているフレームワークにそれがある場合は、文書化する必要があります。

通常、Python Webサーバー内で使用されるマルチスレッドについて。CherryPy はこれをサポートしているので、心配する必要はないと思います。自動的に使用されるはずです。最終的には、アプリケーションが最高のパフォーマンスを発揮するスレッド数を見つけるために、いくつかのベンチマークを作成する必要があります。

それが役立つことを願っています。

于 2009-02-24T09:26:54.980 に答える
2

Google App Engine を見てください。彼らのウェブサイトから:

Google App Engine を使用すると、Google のインフラストラクチャで Web アプリケーションを実行できます。App Engine アプリケーションは、トラフィックとデータ ストレージのニーズの増大に合わせて、簡単に構築、維持、スケーリングできます。App Engine では、サーバーを維持する必要はありません。アプリケーションをアップロードするだけで、ユーザーにサービスを提供する準備が整います。

appspot.com ドメインで無料のドメイン名を使用してアプリを提供するか、Google Apps を使用して独自のドメインから提供することができます。アプリケーションを世界中と共有したり、組織のメンバーへのアクセスを制限したりできます。

App Engine を始めるのに費用はかかりません。無料アカウントにサインアップすると、アプリケーションを開発して公開し、世界中に公開できます。料金も義務もありません。無料アカウントは、最大 500MB の永続ストレージと、月に約 500 万ページ ビューに十分な CPU と帯域幅を使用できます。

何よりも優れている点は、Django を含む Python のサポートが含まれていることです。http://code.google.com/appengine/docs/whatisgoogleappengine.htmlにアクセスしてください

于 2009-02-24T17:30:04.697 に答える
1

スレッド化mod_pythonされた Apache サーバー (Windows のデフォルト) で使用すると、CherryPy は Apache と同じプロセスで実行されます。その場合、ほぼ確実に CP がプロセスを再開することは望ましくありません。

解決策:mod_rewriteまたはを使用mod_proxyして、CherryPy が独自のプロセスで実行されるようにします。その後、心ゆくまでオートリロードできます。:)

于 2009-02-24T16:33:18.327 に答える