oct2py - вызов функции октавы с использованием потоков в python

Я пытался вызвать функцию Octave из программы Python, используя два потока. Мой октавный код просто чтобы посмотреть, как это работает -

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

1 ответ

Решение

Создатель oct2py здесь. Когда вы импортируете октаву из oct2py, вы импортируете вспомогательный экземпляр класса Oct2Py. Если вы хотите использовать несколько потоков, вы должны импортировать Oct2Py и создать его экземпляр либо внутри своей многопоточной функции, либо предварительно выделить и передать его в качестве аргумента функции. Каждый экземпляр Oct2Py использует свой собственный сеанс Octave и выделенные файлы 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"
Другие вопросы по тегам