1

必要に応じて、組み込みの python インタープリターの作業を一時停止/再開する可能性はありますか? 例えば:

C++ 擬似コード部分:

main()
{
     script = "python_script.py";
     ...

     RunScript(script); //-- python script runs till the command 'stop'
     while(true)
     {
          //... read values from some variables in python-script
          //... do some work ...
          //... write new value to some other variables in python-script
          ResumeScript(script); //-- python script resumes it's work where
                                // it was stopped. Not from begin!
     }
     ...
}

Python スクリプトの擬似コード部分:

#... do some init-work
while true:
       #... do some work
       stop # - here script stops and C++-function RunScript() 
            # returns control to C++-part
       #... After calling C++-function ResumeScript 
       # the work continues from this line

これは Python/C API で可能ですか?

ありがとう

4

1 に答える 1

0

私も最近、組み込み言語を手動で「駆動」する方法を探していましたが、この質問に出くわし、潜在的な回避策を共有したいと思いました。

ソケットまたは何らかのメッセージングシステムを介して「ブロッキング」動作を実装します。Python インタープリター全体を実際に停止する代わりに、C++ が評価を行うのを待っているときにブロックするだけです。

C++ は組み込みランタイムを開始し、Python が準備完了の「シグナルをスロー」するのを待つ何らかのループに入ります。たとえば、C++ はポート 5000 でリッスンし、Python を開始し、Python は動作し、localhost のポート 5000 に接続します。次に、C++ は接続を確認し、Python からデータを取得して作業を実行し、ソケットを介してデータを python にシャッフルします。ここで、python はデータを受け取り、ブロッキング ループを離れます。

仮想ランタイムを完全に一時停止する方法がまだ必要ですが、あなたのケースでは、ソケットと、ソケットを使用して 2 つのコードを調整するいくつかのブロック動作で同じことを実現できます。

幸運を :)

編集: この回答で使用されているこの「インジェクション」機能をフックして、Python を完全に停止できる場合があります。おそらく待機ループを挿入するように変更してください。

組み込み Python の停止

于 2013-07-12T14:30:46.173 に答える