4

2 つのスレッドを使用して Python プログラムから Octave 関数を呼び出そうとしました。私のオクターブコードは、それがどのように機能するかを確認するためのものです-

testOctave.m

function y = testOctave(i)
    y = i;
end

そして、pythonプログラムはそれを呼び出そうとします

from oct2py import octave
import thread
def func(threadName,i) :
    print "hello",threadName   // This printf works
    y = octave.testOctave(i)
    print y   // This is ignored
    print 'done'   // This is ignored
    print 'exiting'    // This is ignored

try:
    thread.start_new_thread( func, ("Thread-1", 100 ) )
    thread.start_new_thread( func, ("Thread-2", 150 ) )
except:
    print "Error: unable to start thread"

プログラムはエラーを出さずに終了しますが、上記の関数では、最初の出力のみが実行され、オクターブ呼び出しに続くすべての出力は両方のスレッドによって無視されます。これが発生する理由はありますか?それを機能させるにはどうすればよいですか?

プログラムは特に何もしません。私は oct2py の操作方法を理解しようとしています。

4

1 に答える 1

10

oct2py 作成者はこちら。oct2py からオクターブをインポートすると、Oct2Py クラスの便利なインスタンスがインポートされます。複数のスレッドを使用する場合は、Oct2Py をインポートして、スレッド化された関数内でインスタンス化するか、事前に割り当てて関数に引数として渡す必要があります。Oct2Py の各インスタンスは、独自の Octave セッションと I/O 専用の MAT ファイルを使用します。

from oct2py import Oct2Py
import thread
def func(threadName,i) :
    oc = Oct2Py()
    y = oc.testOctave(i)
    print y

try:
    thread.start_new_thread( func, ("Thread-1", 100 ) )
    thread.start_new_thread( func, ("Thread-2", 150 ) )
except:
    print "Error: unable to start thread"
于 2013-09-25T07:30:24.160 に答える