問題タブ [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 - 実行時にタスクレットを作成する
スタックレス Python を始めたばかりです。実行時、つまり を呼び出した後に、いくつかのタスクレットを作成しようとしていますstackless.run()
。この関数はメイン スレッドをブロックしないので、必要に応じて新しいタスクレットを作成できると思いました。そこで、タスクレットで実行される tasklet-creator 関数を作成することにしました。これは私が持っているものです:
このコードは、5 秒ごとに新しいタスクレットを作成し、それぞれが「Hello, {number of tasklet}!」と出力する必要があります。無限に (これも 5 秒ごとに)。予想される出力は次のとおりです。
しかし、コードを実行しても何も出力されません。
ここで何が問題なのですか?
python - stackless.run() のない python プログラム
A.fun
以下のプログラムは、プログラムを呼び出さずにメンバーをどのように実行しstackless.run()
ますか?
出力:
python - スタックレス python とマルチプロセッシングのスローダウン
スタックレス python を使用して複数のタスクレットを実行するプログラムがあります。問題は、高速ですが、同じコードを実行する 1 つ以上のプロセスを開始すると速度が低下することです。
たとえば、プロセス内でスレッドを使用すると、プログラムが完了するまでに 6 秒かかりますが、2 つのプロセスを開始しても、完了するまでに 6 秒しかかかりません。しかし、タスクレットを使用すると、プログラムは完了するまでに 2 秒しかかかりませんが、2 つのプロセスを同時に実行すると 4 秒、3 つのプロセスを実行すると 6 秒かかります。
私の質問は、これはスタックレス python の通常の動作ですか? 別々のプロセスのタスクレットが別々のスケジューラを使用しており、各プロセスが自分のタスクレットしか表示できないことを確認しましたが、すべてのプロセスのすべてのタスクレットがシステム リソースをめぐって争っている可能性があります。スレッドではなくタスクレットを使用すると、追加のプロセスごとに速度が低下する理由について、私が考えることができる唯一の説明です。私のコードに何か問題があるのか 、それともこれが避けられない問題なのかを判断できるように、これを説明してくれる人が必要です。
python - ブースト公開された Python オブジェクト セグメント エラーを返すファクトリ
ファクトリを介してポリモーフィックなクラス階層を公開する際に厄介な問題が発生しています。問題を示す例を作成しました。
これはすべて、Python(スタックレス 2.7) インタープリターが組み込まれた実行可能ファイルでホストされています。実行可能ファイルを実行して Python コードを取得すると、ファクトリ (a = MakeB()) から変数を作成できます。これは、TestA クラスへのスマート ポインターを返しますが、TestB のインスタンスを保持します。私が抱えている問題は、基本クラスのメンバー変数/関数にアクセスすると機能するが、TestB 変数/関数にアクセスするとセグメント フォールト 11 (osx) が生成されることです。
返されたインスタンスは、そのクラスが TestB であることを python に報告し (クラスは同じことを報告します)、出力メッセージは、TestB が構築されて返されたことを示します。TestB を (ファクトリではなく) 直接作成すると、基本クラスの変数/関数が正しく機能することに注意してください。
私の実際の製品コードはもっと複雑ですが、これはこのテスト例に要約されています。誰かが役立つと思う場合は、segfault のバックトレースを提供できます。
ありがとう。
hpp ファイル
cpp ファイル
python - 「stackless_installer_c4_win32」のインデックス ページが見つかりませんでした (スペルが間違っている可能性がありますか?)
スタックレス python をインストールしようとしています。私が試してみました
私はこれらすべてを実行しましたが、ダッシュの代わりにアンダースコアを使用しても同じです。
これらはすべてこれを吐き出します:
私もこれらを実行しました
そしてすべてが最新です
python - タスクマネージャーによる並列計算
Python でいくつかの並列計算を実行する必要があります。私が考えることができる唯一の互換性のあるアプローチは、マルチプロセス/フォーク モデルですが、これはいくつかの理由で理想的とは言えません。
- 私が理解していることから、Windowsのフォークは高価です
- きめ細かなプロセス管理 (シグナル、つまり SIGSTOP/SIGCONT) は扱いにくい (つまり、言語の外部)
タスクの要件は次のとおりです。
- タスクは新しいタスクを生成する可能性があります
- タスクはタスクマネージャーに登録する必要があります
- タスクは共有状態を必要としません
- タスクは値を返す必要があります (python オブジェクト)
タスク マネージャーは、同時実行タスクの数をスケジュールおよび制限する役割を果たします。タスク マネージャーの要件は次のとおりです。
- 新しいタスクが開始されると、タスク マネージャーは、所定の制限に基づいて他のタスクを一時停止する場合があります。
- タスクが戻ると、タスク マネージャーは中断された他のタスクを続行できます。
- タスクの戻り値が要求されると、タスク マネージャーはタスクの優先度を再編成することがあります (デッドロックを防ぎます)。
ご覧のとおり、タスク マネージャーは並列/並行プロセスである必要はありません。各タスクは、開始または停止時にタスク マネージャーへの同期呼び出しを行う場合があります。他のタスクを待機しているタスクも、同期呼び出しを行う場合があります。
私は他のアプローチを考えることができないようです:
- asyncio は限られたプール内で並列プロセスを開始できますが、そのアプローチはタスクのプリエンプションよりもデータの並列処理に適しています。外部からのタスクの横取り (中断) は、協調的にプログラムされたイベントと互換性がありません。私が間違っている場合は修正してください。ただし、asyncio を使用することはできますが、プロセスを使用する必要があり、「タスク開始/停止」イベントでシグナルを送信する必要があるため、生活が楽になることはありません (利益のない抽象化)。 ?
- スタックレス python が適しているかもしれませんが、実際には python ではありませんか?
何か案は?
PS 私の最終目標は、(装飾された) 関数呼び出しを自動的に並列化することです。タスク マネージャは、スラッシング (フォーク爆弾) を回避するために、並行して実行されるタスク (つまり、再帰関数) の数を制限します。レイジー(タスク待機)、純粋(共有状態なし)、スタックレス(軽量スレッド)言語の方が適しているかもしれませんが、Pythonを使用する必要があります...