私の単純なC++物理シミュレーションとビジュアライゼーションライブラリのインタフェースをPythonに行っています。私はインタラクティブな方法でそれを使用したい - という意味にシミュレーション/視覚化が)リターン(python、ctypes)を待たずにダイナミックライブラリからの関数の対話的呼び出し
を実行中にパラメータを解釈するのpythonから関数を呼び出すことにより、パラメータを調整し、現在non-interactive scripは次のようになります。
import numpy as np
import pyVis3D as vis
# inititalization
vis.lib.initWindow()
# modify visualization state - must do before call vis.lib.loop()
ts = np.linspace(0,2*np.pi,100)
poss = np.transpose(np.stack([ np.sin(ts), np.cos(ts), np.sin(ts*3) ]), (1,0)).copy()
vis.polyline(poss)
# loop of visualization window update
vis.lib.loop(1000000) # I have to wait for return, cannot change anything interactively
私はpythonで代わりにこのような何かをしたいと思いますが、解釈:ここ
>> import numpy as np
>> import pyVis3D as vis
>> vis.lib.initWindow() # inititalization
>> vis.lib.loop(1000000) # run loop
# modify state of vis.lib while vis.lib.loop() is running
>> ts = np.linspace(0,2*np.pi,100)
>> poss = np.transpose(np.stack([ np.sin(ts), np.cos(ts), np.sin(ts*3) ]), (1,0)).copy()
>> vis.polyline(poss) # I should see new curve in that window
がここctypes interfaceとC++ libraryです。
私は解決策がマルチスレッドと関係があると思いますが、私はその経験がありません。このマルチスレッドがPythonやC++のどちらか、あるいはその両方にあるべきかどうかは私には分かりません。
簡単な例(C++)...唯一の私はglob_var
がloop
ながら実行されている変更のpython端子から呼び出さsetGlobVar()
ありたい、とloop
出力がありglob_var
double glob_var=0;
extern{
// this function should run on background, write out state each 10 ms
void loop(int n){
for(int i=0;i<n;i++){
SDL_delay(10); // wait 10 ms
printf("%f \n", glob_var); // each iteration write current state of glob_var
}
}
// this function should be called from python terminal
void setGlobVar(double f){
glob_var = f; // change state of glob_var
}
}
あなたの質問が広すぎるのではないかと心配です。ライブラリのコードを見ることなく、誰もこのように非同期に動作させる方法を教えることはできません。また、コードを表示しても、この形式ではタスクが大きすぎる可能性があります。ありがとうございます。 – BrenBarn