3

更新: 独自の非同期 Web サーバーの作成 (Dave Beazley によるプレゼンテーションに続く) など、Py3 で多くの作業を行った後、最終的に Python (および私のコードの膨大なスタック) をダンプまし。調べてみてください: GitHub (最近のすべての興味深いコードの 95% がここにあります)、npm (ユーザー フレンドリーとは言えないパッケージ マネージャー; よくやったeasy_install、あなたは自分の名に恥じない)、めちゃくちゃモジュールの巨大なリポジトリ (事実上 24 時間 365 日公開されている大量の新しいものを含む)、巨大で活気のあるコミュニティ、すぐに使用できる非同期 HTTP とファイル処理...、これらすべて ( V8のおかげで)の 3 分の 1 で光の速度—何が気に入らないのですか?プロパガンダの続きを読む: 「スクリプティングの未来」 (スライド ホスティング提供: SpreeWebdesign )。

非同期の非ブロッキング方式で HTTP を提供する (および HTTP 要求を行う) 方法を探しています。私が行ったように、 Stackless Python 3.1 (ドキュメントについてはこちらも参照) を選択した場合、これを行うのは難しいようです。

非常に有益で詳細な記事How To Use Linux epoll with Pythonのようないくつかの基本的な例があり、いくつかの貴重な情報を含むstacklessexamplesという名前の Google コード プロジェクトがあります (ただし、Python 3.x 互換コードはありません)。

それで、何日も Web で調査を行い、これまでに見つけた断片をまとめようとした結果、かなり使用可能な非同期 HTTP ライブラリを知っている人はいますか? WSGI 準拠である必要はありません (私はそれには興味がありません)。

サーバー部分は、複数の非ブロッキング HTTP 要求を処理できる必要があります (および、HTTP ヘッダー処理の基本を実行できる可能性があります)。HTTP クライアント部分は、HTTP リクエストを介して非ブロッキングの方法で Web コンテンツを取得できる必要があります (基本的なヘッダー処理も行いますが、承認などの凝った処理は行いません)。

これまでの私の調査では、非ブロッキング HTTP が示されています。

  1. スタックレスで協調的にスケジュールされた環境で意味のある唯一の方法です。

  2. 標準ライブラリのおかげで Stackless Python 3 で実行可能ですselect epoll(Py2.6 で導入されました。一部のソリューションは を好みますが、それは pyevent プロジェクトが Py2.5 で開発を停止したように見えるため、libevent別のハードルを意味します)。

  3. 残念ながら、ほとんどの人は HTTP のブロックに依存しているため、まだ家庭用品ではありません。

今のように見える方法では、ソケット プログラミングの基礎を学び、独自の HTTP サーバー/クライアント ライブラリを作成する必要があります。私はその分野のバックグラウンドがほとんどなく、そのように「歴史を繰り返す」ことになっているので、私はまだその仕事から遠ざかっています.

関連するポインタについては非常に満足しています。select.epoll私は;を利用するソリューションを非常に好みます。古いものよりもはるかにスケーラブルであることを覚えているようですasyncore(ただし、誰かがこれについてより正確なデータを持っているかもしれません)。最小要件として、ソリューションは Ubuntu 9.10 で実行する必要があります。

4

2 に答える 2

0

私はこれが死者を復活させるようなものであることを知っています(そして流れはおそらく彼の問題を解決してから長い間です)が、完全を期すためにスタックレスは3.1.3で利用可能です:

stacklesssocketを使用したHTTPサーバーの実装については、以下を参照してください。

于 2011-01-27T09:43:03.557 に答える
0

ノンブロッキング HTTP ケースは twisted で非常にうまく処理されます。つまり、一連のコールバックを作成し、それらのコールバックを deferred に登録します。Twisted のドキュメントはチェックする価値があります。Stackless はマイクロスレッドを使用しますが、twisted は Web フレームワーク全体をフラグメントごとにコーディングします。コールバック、エラーバック、および deferred でチェーンされた非ブローキング コードは、単一スレッドで実行されるメイン リアクター ループです。これは Async HTTP の方が良いと思います。

于 2011-05-30T09:58:44.363 に答える