問題タブ [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.

0 投票する
3 に答える
3775 参照

python - mmo を設計するための良い python ライブラリ? アクターベースのデザイン

Pythonを使ってmmoゲームをデザインしようとしています...

スタックレスを評価したところ、一般的なpythonではなくフォークなので使いたくない

私は pysage candygram Dramatis と parley のどちらかを選択しようとしています

これらのライブラリのいずれかを試してみてください。

ご回答ありがとうございます

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

python - スタックレス python とマルチコア?

だから、私はStackless Pythonをいじっていて、頭の中に疑問が浮かびました。これは「想定」または「常識」かもしれませんが、スタックレス サイトのどこにも実際に書かれているのを見つけることができませんでした。

Stackless Pythonはマルチコア CPU を利用しますか? 通常のPythonでは、GILが常に存在し、複数のコアを(真に)使用するには、複数のプロセスを使用する必要がありますが、これはスタックレスにも当てはまりますか?

0 投票する
7 に答える
2657 参照

python - プログラムで Python スタック フレームを構築し、コード内の任意のポイントで実行を開始することは可能ですか?

CPython でスタック (1 つまたは複数のスタック フレーム) をプログラムで構築し、任意のコード ポイントで実行を開始することは可能ですか? 次のシナリオを想像してください。

  1. ワークフロー エンジンへの呼び出しであるいくつかの構造 (分岐、待機/結合など) を使用して Python でワークフローをスクリプト化できるワークフロー エンジンがあります。

  2. wait や join などのブロッキング呼び出しは、ある種の永続的なバッキング ストアを使用して、イベント ディスパッチ エンジンでリスナー条件を設定します。

  3. エンジンで待機条件を呼び出し、後で通知される条件を待機するワークフロー スクリプトがあります。これにより、イベント ディスパッチ エンジンにリスナーが設定されます。

  4. ワークフロー スクリプトの状態、関連するスタック フレーム (プログラム カウンター (または同等の状態) を含む) は、数日後または数か月後に待機状態が発生する可能性があるため、保持されます。

  5. その間に、ワークフロー エンジンが停止され、再起動される可能性があります。つまり、ワークフロー スクリプトのコンテキストをプログラムで保存および再構築できる必要があります。

  6. イベント ディスパッチ エンジンは、待機条件がピックアップするイベントを発生させます。

  7. ワークフロー エンジンは、シリアル化された状態とスタックを読み取り、スタックを使用してスレッドを再構築します。次に、待機サービスが呼び出された時点で実行を継続します。

質問

これは、変更されていない Python インタープリターで実行できますか? さらに良いことに、この種のことをカバーする可能性のあるドキュメント、またはプログラムでスタック フレームを構築し、コード ブロックの途中で実行を開始するコードの例を誰かに教えてもらえますか?

編集:「変更されていない python インタープリター」を明確にするために、C API を使用してもかまいません (これを行うには PyThreadState に十分な情報がありますか?) が、Python インタープリターの内部を調べて、変更されたものを構築します。

更新:最初の調査から、実行コンテキストを取得できますPyThreadState_Get()。これは、のスタック フレームへの参照を持つPyThreadState(で定義された)のスレッド状態を返します。スタック フレームは、 で定義されている にtypedef された構造体に保持されます。 コードブロックの先頭からのオフセットとして表されるプログラムカウンターを持つフィールド(bobinceへの小道具)があります。pystate.hframePyFrameObjectframeobject.hPyFrameObjectf_lasti

これは、実際にコンパイルされたコード ブロックを保持している限り、必要な数のスタック フレームのローカルを再構築し、コードを再起動できることを意味するため、一種の朗報です。これは、変更された python インターペレタを作成しなくても理論的には可能であることを意味すると思いますが、コードはおそらく、インタープリタの特定のバージョンに厄介で緊密に結合される可能性があることを意味します。

残る問題は次の3つです。

  • トランザクション状態と 'saga' ロールバック。これは、O/R マッパーを構築するために使用するメタクラス ハッキングのようなものによっておそらく達成できます。私は一度プロトタイプを作成したので、これがどのように達成されるかについてかなりのアイデアを持っています.

  • トランザクション状態と任意のローカルを堅牢にシリアル化します。これは、読み取り__locals__(スタック フレームから利用可能) と、pickle への呼び出しをプログラムで作成することによって実現できます。ただし、ここに何があるのか​​ わかりません。

  • ワークフローのバージョン管理とアップグレード。システムはワークフロー ノードのシンボリック アンカーを提供していないため、これはやや複雑です。これを行うには、すべてのエントリ ポイントのオフセットを特定し、それらを新しいバージョンにマップする必要があります。おそらく手動で行うことは可能ですが、自動化するのは難しいと思います。この機能をサポートしたい場合、これがおそらく最大の障害になります。

更新 2: PyCodeObject ( code.h) には addr ( f_lasti)-> 行番号マッピングのリストがありPyCodeObject.co_lnotabます (ここで間違っている場合は訂正してください)。これは、ワークフローを新しいバージョンに更新するための移行プロセスを容易にするために使用される場合があります。これは、凍結された命令ポインターを新しいスクリプトの適切な場所にマップし、行番号に関して行うことができるためです。まだかなり面倒ですが、もう少し有望です。

更新 3:これに対する答えはStackless Python かもしれません。 タスクを一時停止してシリアル化できます。これがスタックでも機能するかどうかはわかりません。

0 投票する
4 に答える
1200 参照

concurrency - 並列/並行アーキテクチャの使用を促進するのはどのような課題ですか?

私は、スタックレス pythonerlangなど、並列処理や並行処理が組み込まれている言語を使用できる可能性に非常に興奮しています。スケーラビリティとパフォーマンスを実現するための良い/簡単な方法です。

ただし、私は線形/シリアル/OOP/機能的な方法でソリューションを考えることに慣れているため、同時実行を使用する価値のある方法でドメインの問題をキャストするのに苦労しています。多くのことを忘れる必要があるだけだと思いますが、次のことを尋ねると思いました。

  • スタックレスやアーランなどでかなり大きなものを実装しましたか?
  • なぜそれが良い選択だったのですか?良い選択でしたか?もう一度やりますか?
  • あなたの問題のどのような特徴が、並行/並列が正しかったことを意味していますか?
  • 並行性/並列性を利用するために、既存の問題を再キャストしましたか? と
  • もしそうなら、どのように?

彼らが喜んで共有したい経験はありますか?

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

python - スタックレス python ネットワークのパフォーマンスは時間の経過とともに低下しますか?

だから私はスタックレスの python をいじって、マイクロスレッド/タスクレットを使ったプログラミングを独学するために非常に単純なウェブサーバーを書いています。しかし、今私の問題に、ab -n 100000 -c 50 http://192.168.0.192/Apache ベンチで (100k リクエスト、50 同時実行) のようなものを実行すると、6k req/s のようなものが得られ、2 回目には 5.5k、3 回目は 5k、4 回目は 4.5k になりますなど、100req/s か何かまでずっと。

ただし、Python スクリプトを再起動すると問題はなくなります。

今私の質問はなぜですか?タスクレットの削除を忘れていませんか? stackless.getrunco​​unt() を確認しました (そして、何らかの理由で常に 1 を返すようです)。完了したすべてのタスクレットで .kill() を呼び出してみましたが、役に立ちませんでした。私はこれを理解することはできません。

0 投票する
4 に答える
24471 参照

python - スタックレス Python の欠点は何ですか?

私は最近Stackless Pythonについて読んでいますが、バニラの cPython と比較して多くの利点があるようです。無限再帰、マイクロスレッド、継続などの優れた機能をすべて備えていると同時に、cPython よりも高速 ( Python wikiを信じるなら約 10%) であり、cPython互換性があります (少なくともバージョン2.5、2.6)。および 3.0)。

これらはすべて、うますぎるように見えます。しかし、TANSTAAFL、Python コミュニティの間で Stackless に対する熱意はあまり見られず、PEP 219は実現していません。何故ですか?スタックレスの欠点は何ですか? スタックレスのクローゼットに隠されている骸骨は?

(私は、Stackless が実際の並行性を提供しないことを知っています。並行してプログラミングするためのより簡単な方法であるだけです。それはあまり気にしません。)

0 投票する
3 に答える
5133 参照

.net - ソーシャル マルチプレイヤー ブラウザ ゲームのアーキテクチャ (バックエンドの選択 + フロントエンドの選択 [flash/silverlight])

オンライン マルチプレイヤー ソーシャル ゲームの開発を考えています。世界の共有状態には、バックエンドで何か高速なものが必要になるため、考えられる解決策は次のようになります。

  1. サーバー上の高速ゲームエンジン (例: c++ ) といくつかのフロントエンド言語 (php/python/ruby) + フラッシュ

  2. Python のスタック全体 (ツイストまたはスタックレス Python を使用) + フラッシュ

  3. .NET (asp.net または asp.net mvc) + フラッシュ

  4. .NET + シルバーライト

最初の 1 つは、生産性の観点からやり過ぎかもしれません (3 つの異種層)

番号 4 はプログラマにとって天国かもしれません (すべてのレイヤーで共通の環境)。

  • そのようなものは Silverlight で構築されたことはありません。
  • Silverlight の設計者を見つけるのは難しいかもしれません
  • SL フル OO アーキテクチャと比較すると、Flash ムービー/クリップ モデルが批判されていますが、仮想世界の余分な部分を外部のデザイナーが設計する場合、Flash ムービー/クリップ モデルは有利ではありませんか? 彼らは、例えば.swfを準備するだけです。4 つのフレームで 1 つのアイテムの 4 つのパースペクティブ - SL では難しくないですか?
  • Silvelight にはいくつかのゲーム機能 (衝突検出など) が欠けているようです

どう思いますか?

[編集] ゲーム自体はより大きなポータルの一部になるため、エンジンを何らかの Web フレームワークと統合するとよいでしょう。

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

python - スタックレス Python では、チャネルを介してチャネルを送信できますか?

私は現在スタックレスを実行していないので、これを自分で試すことはできません。

ch2ch3は同じチャンネルですか?言う:

この機能を見て、Robert Pike (Plan9 で有名) が Google で行ったNewsqueakに関する講演を思い出しました。Newsqueak では、チャネルを介してチャネルを送信できました。

0 投票する
9 に答える
8974 参照

python - マルチプロセッシングまたはマルチスレッド?

wxPython インターフェイスを使用して、Python でシミュレーションを実行するためのプログラムを作成しています。プログラムでは、シミュレーションを作成することができ、プログラムはそれをレンダリング (=計算) します。レンダリングには非常に時間がかかる場合があります。

ユーザーがシミュレーションを開始し、初期状態を定義するとき、ユーザーがプログラムでさまざまなことをしている間、プログラムがバックグラウンドでシミュレーションを継続的にレンダリングするようにします。いっぱいになる YouTube スタイルのバーのようなもの: レンダリングされたポイントまでしかシミュレーションを再生できません。

複数のプロセスまたは複数のスレッドを使用する必要がありますか? 人々は私にこのmultiprocessingパッケージを使うように言ったので、私はそれをチェックアウトし、良さそうに見えましたが、スレッドとは異なり、プロセスは多くの情報を共有できないとも聞きました (そして、私のプログラムは多くの情報を共有する必要があると思います. ) さらに、Stackless Python についても聞きました。別のオプションですか? 何も思いつきません。

お知らせ下さい。

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

django - DJango を使用したスタックレスのインストールと構成

スタックレスを使用する DJango コマンド拡張機能を実行しようとしています。

Stackless Python (python 2.5 でコンパイル) をインストールしたので、コンソールに python2.5 と入力すると起動し、バージョンが Python 2.5.2 Stackless 3.1b3 060516 (python-2.52:72942, May 26 2009, 23: 07:34) Linux2 の [GCC 4.3.3]

しかし、私の日食では、django アプリケーションを python2.6 で実行するように構成しました。具体的には PyDev 設定で。したがって、明らかにimport stacklessについて言及すると、そのようなパッケージはないと表示されます。

問題は、「/usr/local/lib/python2.5/site-packages」ディレクトリを追加してもスタックレスをインポートしないことです。

この問題の解決策は何ですか?