問題タブ [aiohttp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - aiohttp 低レベル サーバーの展開オプションの選択
私のaiohttpサーバーの展開オプションで完全に失われました。本番環境でサービスを移動するには複数の方法があり、正しい方法を選択できません。
- systemd script/supervisord + api hour 短所: api hour の仕組みがわかりません。サーバーのデーモン コルーチンを制御しているように見えますが、私のサーバーの coro は asyncio.gather 関数で実行されます (低レベルの aiohttp サーバー/接続ハンドラー)。他のコロ (スーパーバイザー/ステートキーパーのクラス永久実行メソッド) と、API 時間で 2 番目のコルーチンを処理するのに問題がある可能性があります
- ガンコーン同じだけど1のように
- nginx + unix ソケット +systemd スクリプト 短所: デプロイとサポートが非常に難しいように見えます。
- systemd スクリプトの下の純粋な aiohttp サーバー: 短所: pid ファイルの処理、低パフォーマンス (?)
私の実行機能は次のようになります。
python - Asyncio + aiohttp - redis Pub/Sub と websocket を単一のハンドラで読み書き
現在、aiohttpで遊んで、websocket 接続を使用したモバイル アプリのサーバー アプリケーションとしてどのように機能するかを確認しています。
簡単な「Hello world」の例を次に示します (要旨はこちら):
問題
ここで、以下に説明する構造を使用したいと思います (ノード サーバー = python aiohttp)。より具体的には、asyncio-redisでRedis Pub/Subメカニズムを使用して、websocket 接続とWebsocketEchoHandlerの Redis の両方を読み書きします。
WebsocketEchoHandlerは完全に単純なループなので、これをどのように行うべきかわかりません。Tornadoとbrükvaを使用する場合は、コールバックのみを使用します。
余分な(おそらくトピック外の)質問
私はすでにRedisを使用しているため、次の 2 つの方法のどちらを使用する必要がありますか。
- 「クラシック」Web アプリのように、すべてのコントローラー/ビューを用意し、メッセージングのみにRedisを使用します。
- Web アプリは、タスク キュー (最も単純なPython RQ ) としても使用される、クライアントとRedisの間の単なるレイヤーである必要があります。すべてのリクエストはワーカーに委任する必要があります。
編集
http://goldfirestudios.com/blog/136/Horizontally-Scaling-Node.js-and-WebSockets-with-Redisからの画像
編集2
明確にする必要があるようです。
- Websocket のみのハンドラーを上に示します
Redis Pub/Sub ハンドラは次のようになります。
このハンドラーは、Redis チャネルch1とch2をサブスクライブし、それらのチャネルから受信したすべてのメッセージを websocket に送信します。
このハンドラーが必要です:
ただし、次のコードは常に順次呼び出されるため、websocket からの読み取りは Redis からの読み取りをブロックします。
/li>
イベントが2つのソースのいずれかから受信したメッセージであるイベントで読み取りを実行したい。
python - aiohttp フォームベースの認証
aiohttp
ログインページと組み合わせて動作するコードが見つかりません。目標は単純です。ユーザー名とパスワードを使用したフォームベースの認証です。この Cookie は、後続の aiohttp 非同期フェッチ呼び出しで使用したいと考えています。
バージョン間で aiohttp のセッション全体の概念が変更されたように見えるので、最新バージョンでどのように実装できるか興味があります。Cookie を一度取得してから、それを非同期の問題で使用する方法がわかりません。
残念ながら、どこにでもあるスニペットで動作させることができなかったので、完全に機能する例を見たいと思っています。
これが始まりかもしれませんが、よくわかりませんし、すべてをそれに接続する方法も確かにわかりません(まだ必要aiohttp.TCPConnector
ですか?)
http://aiohttp.readthedocs.org/en/latest/ client_reference.html#aiohttp.client.ClientSession
mechanize を使用した Python 2 での非非同期バージョンの例 (ただし、asyncio などには当然 Python 3 を使用します):
python - gunicorn と nginx を使用した aiohttp.web アプリケーションのデプロイ
aiohttp Web アプリをデプロイしようとしていますが、アプリを unix ソケット経由で提供する方法がわかりません。これは、nginx と gunicorn を相互に通信させるために必要だと思います。
app.py として保存された aiohttp ドキュメントからの簡単なサンプル アプリ:
これを gunicorn で実行すると、直接動作します:
しかし、代わりに UNIX ソケットにバインドしようとすると、次のエラーが発生します。
トレースバック:
aiohttp の問題 ( https://github.com/KeepSafe/aiohttp/issues/136 ) で、ソケットを使用してソケットを作成し、 loop.create_server() 関数のパラメーターとして配置するものに遭遇しましたが、できませんでした何も機能しません。(彼のコードのアプリが同じ web.Application オブジェクトかどうかもわかりません)
これを機能させる方法を知っている人はいますか?ありがとう!
python - aiohttp はしばらくすると送信を停止します
エラーが発生した場合に備えて、同時HTTPリクエストをサーバーに送信する必要があるコードをいくつか書いています。再試行する必要があります。実行していると、送信が速くなり、数分後に送信速度が 0 に低下します。何かがロックされて解放されず、送信が停止するようです。
データを送信する関数はこれです
コネクタは初期化されています
send 関数は、800 個のタスクをリストに追加することによって呼び出され、それらが io を詰まらせないように待機しています。
私はそれをデバッグしたり、問題の原因を突き止めたりするのに問題があります。誰も手がかりを持っていますか?
python - Python aiohttp リクエストは停止しましたが、例外は発生しませんでした
aiohttp
URLをリクエストするために使用します。ほとんどの場合、正常に実行されますが、例外が発生せずに停止することがあります。
コードでわかるように、すべての例外をキャッチしますが、停止すると例外のログは出力されません。
ログは次のようになります。
しかし、「res = yield from r.json()
」は印刷されず、停止し、例外はスローされません。
python - フラスコ + asyncio
私の目標は、アプリケーションを python2 から python3 にアップグレードすることです。このアプリケーションは、flask、flask-admin、gevent (コルーチン)、socketio のパッケージを使用します。フラスコは去ることが決定され、残りのパッケージは交換されました。パッケージを置き換えるいくつかの試みがありました:
- Tornado + SockJS: SockJS チャネルがないため、多くの余分なコード
- Flask-aiohttp : 認証中に request.form['username'] がエラーをスローします。
トレースバック (最新の呼び出しが最後):
では、Flask-aiohttp の作業に対して何ができるでしょうか? または、代わりにどのパッケージを使用しますか?
python - Aiohttp wsgi ハンドラーが機能しない
Flask アプリケーションを aiohttp でラップする必要があります。起動すると、エラーが発生します:
コード:
この例のようにルートを変更すると
ValueError が発生します: パスは / で開始する必要があります。私は何を間違っていますか?
python-3.x - gunicorn がホストする aiohttp アプリの構成
私は最初のaiohttp
ベースの REST に似たサービスを実装しました。これはおもちゃの例として非常にうまく機能します。を使用して実行したいと思いますgunicorn
。私が見つけたすべての例は、いくつかのモジュールで準備されたアプリケーションを指定しており、それは によってホストされていgunicorn
ます。これにより、インポート時にアプリケーションをセットアップする必要があり、これは好ましくありません。使用されている構成ファイル (development.ini、production.ini) を指定Pyramid
し、その ini ファイルに基づいてアプリケーションをセットアップしたいと思います。
これは多かれ少なかれすべての python web フレームワークに共通ですが、aiohttp + gunicorn でそれを行う方法がわかりません。これらのツールを使用して開発設定と本番設定を切り替える最もスマートな方法は何ですか?