問題タブ [python-stackless]
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 - Eventlet または gevent または Stackless + Twisted、Pylons、Django、および SQL Alchemy
私たちは大量の非同期 io を必要とするアプリに Twisted を広く使用しています。代わりに CPU バウンドの場合があり、そのためにプロセスのプールを生成して作業を行い、複数のサーバー間でこれらを管理するためのシステムも備えています - すべて Twisted で行われます。よく働く。問題は、新しいチーム メンバーを最新の状態に導くのが難しいことです。Twisted で非同期コードを書くには、垂直に近い学習曲線が必要です。まるで人間がそのように自然に考えていないかのようです。
おそらく、混合アプローチを検討しています。おそらく、xmlrpc サーバー部分とプロセス管理を Twisted に保持し、他のものを少なくともある程度同期しているように見えるコードで実装しますが、そうではありません。繰り返しになりますが、明示的よりも暗黙的が好きなので、これについてもう少し考えなければなりません。とにかくグリーンレットに - それはどのくらいうまく機能しますか? つまり、Stackless があります。私の Gallentean アバターからわかるように、CCP の主力製品である EVE Online ゲームで Stackless が使用され、大きな成功を収めていることを私はよく知っています。Eventlet や gevent はどうですか? 今のところ、Twisted で動作するのは Eventlet だけです。ただし、gevent は純粋な python 実装ではなく、代わりに libevent に依存しているため、より高速であると主張しています。また、特異性や欠陥が少ないと主張しています。イベント私が知る限り、それは 1 人の男性によって維持されています。これは私をやや不安にさせますが、すべての優れたプロジェクトはこのように開始されるため...次にPyPyがあります-私はまだそれについて読み終えていません-ちょうどこのスレッドで見ました: Drawbacks of Stackless。
非常に紛らわしいです-一体どうすればよいのだろうか-Eventletがおそらく最善の策のように思えますが、それは本当に十分に安定していますか? 誰でも経験がありますか?代わりに Stackless を使用する必要があります。これは、Twisted と同様に、実績があり、テクノロジが証明されているためです。それらはうまく連携します。それでも、これを行うために別のバージョンの Python を用意しなければならないのは嫌です。何をすべきか....
ただし、このやや不快なブログエントリは、私にとっては頭に釘を打ちました: Asynchronous IO for Grownups I don't get the Twisted is being like Java の発言私にとって Java は通常、スレッドの考え方のどこにいるのかは関係ありません。それにもかかわらず、そのモンキーパッチが本当にそのように機能する場合は、すごい. うわー!
python - スタックレス Python タスクレット バインド関数の戻り値を取得しますか?
スタックレスエキスパート、
Stackless Python でタスクレットを作成することができました (Stackless 側と C 側の両方から)。
スタックレスでタスクレットを作成するには、任意の Python 呼び出し可能オブジェクト (関数) をタスクレット (および必要なパラメーター) にバインドすると、バインドされた呼び出し可能オブジェクトがタスクレットとして実行されるように思えます。ただし、任意の callable には、実際には呼び出し元にとって重要な戻り値がある場合があります。しかし、タスクレットとして実行されているバインドされた callable の戻り値を取得する方法はまだ見ていません。
純粋な Stackless Python 側では、Micromanaging と呼ばれる使用法を目にします。これは、元の関数を管理関数でラップし、元の関数の戻り値をキャプチャして、他のコンテキストで使用するためにどこかに保存することができます。
残念ながら、私の特別な使用例では、C (C++) 側からタスクレットを作成し、後で使用する重要な戻り値を持つ (ブロックする可能性がある) Python 呼び出し可能オブジェクトにバインドします。C関数を動的に呼び出し可能なPyObjectに変換する方法(モジュールテーブルの初期化などを含まない)を見つけられず、静的ステートレスC 関数 (プロトタイプは PyObject* (PyObject*, PyObject*) でなければならないと思います) は一般的に、C++ の世界ではまずい考えです。
また、Stackless C API には、タスクレットの戻り値を取得するための適切な関数が含まれていないようです。上記の Micromanaging 関数 (ステートフルである可能性があります) を Python で記述し、どこかに保存された戻り値を取得する方法を (ステートフルな方法で、つまりグローバル変数を使用しないで) 提供する唯一のオプションですか? または、私が検討できる他のオプションがあるのでしょうか?
どうもありがとうございました、
リン
PS Cおよびオペレーティングシステムレベルのプログラミングでは、スレッド関数の戻り値は終了コードに対してのみ意味があり、スレッド関数には厳密な関数プロトタイプがあることを理解しています。つまり、C関数は実行可能になるためにいくつかの厳密な規則に従わなければなりませんスレッドとして/によって。そして今、私たちはPythonについて話している:)
python - Python および Erlang ライクの Actor モデル ライブラリ/フレームワークはどれですか?
Python 2.x 用の学習しやすいアクター ライブラリまたはフレームワークを探しています。Candygram と Twisted を試しましたが、気に入りませんでした。suppero Greenlet (= stackless python) に拡張しやすいものが欲しいです。
- キャンディグラムは古すぎる。
- Twisted は複雑すぎます。
- Gevent: Actors モデルをサポートできるかどうかは不明です。
何を指示してるんですか?
python - gaeのnagareフレームワーク?
グーグルアプリエンジンでナガレフレームワークを使用している人はいますか?
面白そうですが、使い方のドキュメントが見つかりませんでした
スタックレスPythonを使用しているため、GoogleAppEngine。
だから、グーグルアプリエンジンで実行される可能性はありますか?
また、スタックレスのPythonは通常のPythonとどのように異なりますか?
ありがとう。
リンク:
c++ - PyRun_SimpleFile で Python/C API がクラッシュするのはなぜですか?
C++ アプリケーションにさまざまなスクリプト言語を埋め込む実験を行ってきましたが、現在 Stackless Python 3.1 を試しています。アプリケーションから簡単なスクリプトを実行するために、いくつかのチュートリアルと例を試しましたが、見つけることができるものはほとんどありませんでした。
奇妙な理由で、このコードを実行すると、次の場所でアクセス違反が発生します。
同様の問題を抱えている他の人をオンラインで検索しましたが、1つしか見つかりませんでした。彼らの唯一の解決策は、古いバージョンの Python でのみ可能と思われる回避策でした: Python ファイル オブジェクトを作成し、FILE*
その Python ファイル オブジェクトから をに返しますPyRun_SimpleFile
。このような関数呼び出しは利用できませんが、Python 3.1 API はファイル記述子からファイル オブジェクトを作成し、ファイル記述子を返しますが、PyRun_SimpleFile
関数には引き続きFILE*
.
ファイル全体を手動でメモリにロードし、それを巨大な文字列として実行する以外に、ファイルからスクリプトを実行する方法について途方に暮れています。確かに実用的な解決策ではありません。
何を与える?API に内部エラーがある場合、どうすればこのタスクを実行できますか?
更新: Stackless Python 3.1 をソースからビルドできましたが、同じ C ランタイム ライブラリを使用しているにもかかわらず、クラッシュはまったく変わっていません。私のプロジェクトと Stackless Python 3.1 ソースはどちらも、Visual Studio 2010 の C++ コンパイラと C ランタイムでビルドされています。FILE* ではなくファイル名を使用するように Python を変更する以外に、この問題を解決する方法については、もはや何も考えていません。別の恐ろしい回避策。
python - 継続ベースの Python Web アプリケーション フレームワークの設計
Java や Ruby などには多くの継続ベースのフレームワークがありますが、Python にはありません。ながれフレームワークはこの問題をある程度解決しますが、標準の python を使用せず、スタックレス python を使用して継続の問題を解決します。
私は考えていた、
標準のpythonでそのような継続Webフレームワークを作成するための標準のpython制約のどの部分ですか?
それに対する回避策は何ですか?継続フレームワーク アーキテクチャの標準部分は何ですか (モデル ビュー コントローラーは MVC にあるため)。
python - スタックレスPythonでは、チャネルを介して送信されるデータは不変ですか?
私には典型的な生産者、消費者パターンがあります。プロデューサーがチャネルを介してオブジェクトを送信する場合、コンシューマーがオブジェクトを受け入れるまで、プロデューサーはブロックされます。コンシューマーがオブジェクトを受け入れた後、プロデューサーは何らかの方法でオブジェクトを変更します。消費者はオブジェクトが変更されるのを見ますか?または、チャネルを介してデータを送信するときに暗黙のコピーがありましたか?
python - ゲームのステート マシンの実装において、Lua のコルーチンよりもスタックレスの Python のマイクロスレッドの利点は何ですか?
Lua のコルーチンよりもスタックレスの Python 実装に利点はありますか? それらの違いは何ですか?
python - サンドボックス化されたスタックレスPython?
非常に複雑なワークフローを記述するためのスクリプト言語が必要です。
これらのワークフローは、ユーザー入力が必要な場合は常に一時停止し、入力後に再開する必要があります(数か月後になる可能性があります)。Stacklessからのシリアル化可能な継続が適しているようです。
ユーザーは、ワークフローを自分で編集できる必要もあります。シリアル化された継続が基になるコードの変更をどのように処理するかはわかりません。継続と一緒にGitバージョンのハッシュを保存し、状態が不要なチェックポイントで継続を「アップグレード」する必要があるかもしれないと思います。
読みやすさが非常に優先され、動的な機能が重要であるため、Python構文を好みます。しかし、私は提案を受け入れています。
- 最終的には、基礎となるコードを操作するビジュアルフローチャートエディターを作成する予定です。
StacklessとPyPyを詳しく調べました。Stacklessはサンドボックス化の約束を提供していないようですが、PyPyはスタックレスとサンドボックス化の両方を提供しているようですが、両方を同時に持っているという言及は見つかりません。
解決策はありますか?私を良い解決策に導くことができる専門家がそこにいるなら、私はペイパルアカウントを持っていて、それを喜んで使用します。
python - Python/Erlang: Twisted、Stackless、Greenlet、Eventlet、Coroutines の違いは何ですか? それらはErlangプロセスに似ていますか?
私の不完全な理解は、Twisted、Stackless、Greenlet、Eventlet、Coroutines はすべて、非同期ネットワーク IO と、非常に軽量で切り替えが速いユーザーランド スレッドを利用するということです。しかし、それらの違いが何であるかはわかりません。
また、Erlang プロセスに非常に似ています。それらはほとんど同じものですか?
このトピックをより理解するのを手伝ってくれる人なら誰でも大歓迎です。