問題タブ [gevent]

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.

0 投票する
2 に答える
1413 参照

python - geventを使用したmongoengine、接続を閉じる/終了する方法は?

geventプロセスでconnection refused because too many open connections: 204実行しようとすると、エラーが発生します。MyApp.objects.get(foo=bar)models.py にはconnect('my_db'). 私のスクリプトでは、gevent.monkey.patch_all()この質問を見たことがあります

pymongo + gevent: バナナを投げて、monkey_patch だけ?

そしてこの問題

https://github.com/hmarr/mongoengine/issues/272

しかし、接続にアクセスして呼び出す方法がわかりませんend_request。このパッチも試しましたが、役に立ちません (間違って使用していない限り)。

https://gist.github.com/1184264

0 投票する
1 に答える
81 参照

python - スタブスクリプトからメインスクリプトをインポートすると、フリーズが発生します

py2appで配布するアプリケーションを構築しています。ソースを.appファイルから抽出したくないので、run.pyという名前のスタブファイルがあります。このファイルは、mainapp.pyのコードを実行します。

これをターミナルで直接実行すると(py2appの関与なし)、コードのgeventに依存する部分がフリーズします。.appに変換しても結果は同じです。上記の方法でインポートすると、インタプリタの環境が変わりますか?フリーズするだけで、エラーメッセージが表示されないのは奇妙に思えます(try / catchブロックはありません)。

0 投票する
1 に答える
6789 参照

python - geventでWebアプリを実行する

Webサーバーおよびアプリケーションフレームワークとしてgeventを試してみたいと思います。Pythonアプリケーション全体を強制終了して再起動せずに、サーバーを「再起動」したり、アプリケーションコードを更新したりする方法がわかりません。

これはまさにそれが行われている方法ですか?たぶん、それは私がアパッチの方法とは異なるパラダイムを理解することの問題です。

また、半ば関連する質問として、geventを介してWebサーバーとサイト/サービス自体を実行することも良い考えです。サーバーにgunicornを使用し、アプリケーションにgeventを使用する他の実装を見てきましたが、私が見たベンチマークから、スケーリングに関しては、geventはサーバーとしてgunicornをはるかに上回っています。

0 投票する
1 に答える
387 参照

javascript - ブラウザマルチプレイヤーネットワーク戦略-これは実行可能な解決策のように見えますか?

プラグインをほとんどまたはまったく必要としない、純粋なブラウザベースのゲームとして、ある種のマルチプレイヤーRPGを作成することに興味があります。かなりの研究を重ねて、次のような計画にたどり着きました。ここで参照している技術の一部がすべてのブラウザー(特にIE)で採用されているわけではないことは承知していますが、当面はそれを受け入れたいと思います。

また、MMOはとにかく頑張るという高い目標だと思いますが、過去に同じような方向で小さなプロジェクトをたくさんやったことがあるので、やっとこれをやりたいと思っています。

だからここに大まかな概要があります、私は誰もがこの配置で見ることができる明白な問題について聞いてみたいです:

クライアント: WebGL / Javascript(おそらくthree.js)。ブラウザのローカルストレージを使用してゲームアセットを保持し、ブラウザのキャッシュを削除するとこれらが削除されることを受け入れます。

メッセージ:便利でサイズを小さくするために、Googleプロトコルバッファ を使用してクライアント/サーバー間でメッセージをエンコードします。メッセージ配信はWebSocket経由で行われます。

ゲームサーバー: Pythonのgevent 上で実行されます(多くの同時実行を処理するための優れたソリューションのようです)。ここの設計に基づいて、シャーディングされたパターンを使用して構築されます:

DBサーバー: データベース用のMySQL、ゲームサーバーとDBの間で機能するPHP。

詳細: ゲームサーバーで個々のクライアントを1秒間に約15〜20回更新し、クライアント側の予測を使用してギャップを埋めるつもりです。クライアントは、30fpsの範囲でサーバーにキー入力/メッセージを送信できます。ターン制ではなく、できるだけリアルタイムに近い体験をしたいと思います。私の主な関心事はWebSocketのTCPベースのプロトコルですが、これによりすべてが不可能になりますか?

このソリューションはSOにとって現実的だと思いますか?

どうもありがとう、

0 投票する
1 に答える
815 参照

python - py2app'ed application runs properly in alias mode but not when bundled

I have a pyobjc app running in a 32-bit only python build that makes use of the gevent library. Everything works great in py2app'ed alias mode, but once I build an app bundle, the gevent module can't find the httplib library, even if it was bundled with the site-packages directory.

I've tried false importing as suggested (even if the module seems to have been packaged), but to no avail. It can find the gevent.httplib module but not the module it's supposed to monkey patch. could this be a problem with the monkey patching feature?

EDIT: it looks like find_module isn't working properly with my py2app bundle. Is there a workaround to this? I don't think it's a problem with dotted modules as httplib isn't dotted (it's part of the core python libs)

EDIT 2: so it definitely is imp.find_module. Using import('httplib') instead of load_module fixes it, but I had to delete the reference to 'httplib' in sys.modules because it can't monkey patch if it's already loaded. I don't think this is the correct way to do it though, though the built app bundle works properly (httplib is now monkey patched and allows init with HTTPSConnection). Is there any workaround/fix to this py2app problem?

0 投票する
1 に答える
1220 参照

python - 非ブロッキングjoinall()によるGeventインクリメンタルプロセス

ここでは、設定に合わせていくつかの変更を加えたいと思います。

サーバーに対して行われた単一のリクエスト内で複数のAPI呼び出しからの応答が必要です。これらすべてのAPI呼び出しから、結果を組み合わせて応答として返したいと思います。ここまでは、geventのドキュメントの例とここに示されているように、ほとんどすべてが続きます。ここでの落とし穴は、応答を段階的に渡したいということです。したがって、最初のAPI呼び出しが結果を返した場合、この結果を1つの長い待機リクエストでフロントエンドに返し、他のAPI呼び出しを待って、同じリクエストでそれらを渡します。フロントエンド。

私はコードを介してこれを実行しようとしましたが、この設定を続行する方法がわかりません。すべてのグリーンレットが応答を取得し終えるまで、gevent.joinall()とblockを実行します。.join()

この設定でgeventを続行する方法はありますか?

ここで使用しているコードは、リンクhttps://bitbucket.org/denis/gevent/src/tip/examples/concurrent_download.pyにあります。ここ.joinall()で、最後のステートメントは、すべてのURLが完全に応答を返すまで待機します。コールバック関数print_head()で応答を処理し、増分的に返すことができるように、ブロックしないようにします。

0 投票する
2 に答える
1180 参照

memcached - Gevent対応のmemcacheクライアント?

gevent用のmemcacheクライアントのポート(https://github.com/hjlarsson/gevent-memcache)があるようですが、2010年8月以降更新されていません。 gevent?

0 投票する
1 に答える
229 参照

python - 一連の関数を並行して実行して HTTP 要求に応答する

私はこれに対してさまざまなアプローチを試してきましたが、Python でこの問題を解決するための最良のアプローチは何かを皆さんが考えていることを確認したいと思います。

基本的に、単一のクエリ用語が提供されたリクエストを受け入れ、その用語と並行して一連の計算を実行する Web サービスがあります。これらの計算は、個々の関数呼び出しと考えることができます。

リクエストが来るとすぐに関数を非同期で呼び出し、結果が少しずつ出てくるまでリクエストを保持するという考え方です。

私の調査によると、 geventのようなライブラリを使用するのがおそらく最善の方法のようですが、私はまだ greenlet に完全に慣れていません。また、私が探しているタイプの機能を達成するために (結果が利用可能になったときに長いリクエストを介してクライアントに送り返されるようにするため)、これをサポートする特別なタイプの StreamServer を使用する必要があるようです。応答自体は、フロントエンドの JavaScript モジュールによって読み取られる単なる JSON オブジェクトであり、ブラウザに送り返されると UI コンポーネントが更新されます。

これを行うための最良のアプローチは何ですか?gevent のようなものを使用することは理にかなっていますか、それともライブラリの支援なしにコルーチンを使用して実装する必要がありますか? これは、過去に多くの人がここで行ってきたことだと思います。いくつかの推奨事項を集めたいと思います。

詳細をご希望の場合はお知らせください。ご提案をお待ちしております。

0 投票する
2 に答える
1796 参照

python - Python - bottle+gevent は静的ファイルを提供できません

私は私のpython webdev実験のためにgeventでボトルを使用しています。私の問題は、静的ファイルを提供できないことです。たとえば、テンプレートで外部 css を使用します。私のフォルダ構造は次のとおりです: /static/css/style.css

私のコード:

index.py

ルート.py

端末からの私のトレースバックは次のとおりです。

助けてください。

アップデート:

不安定なバージョンの Bottle (バージョン 0.11) をダウンロードして、スクリプトにインポートしました。これで 500 エラーとトレースバックはなくなりましたが、style.css で 404 が表示されます。

0 投票する
5 に答える
15390 参照

python - マルチプロセッシングを壊すGeventモンキーパッチ

マルチプロセッシングのプールを使用してプロセスのグループを実行しようとしています。各プロセスはグリーンレットの gevent プールを実行します。この理由は、多くのネットワーク アクティビティだけでなく、多くの CPU アクティビティがあるためです。そのため、帯域幅とすべての CPU コアを最大化するには、複数のプロセスと gevent の非同期モンキー パッチが必要です。マルチプロセッシングのマネージャーを使用して、プロセスが処理するデータを取得するためにアクセスするキューを作成しています。

コードの簡略化されたフラグメントを次に示します。

これが生成する例外は次のとおりです。

これは、通常のソケット モジュールと gevent のソケット モジュールの動作の違いによるものだと思います。

サブプロセス内でモンキーパッチを実行すると、キューは正常に作成されますが、サブプロセスがキューから get() を実行しようとすると、非常によく似た例外が発生します。サブプロセスで多数のネットワーク要求を実行するため、ソケットにモンキーパッチを適用する必要があります。

私のバージョンのgeventは最新だと思います:

何か案は?