I've been trying to run multiple thread of Matlab by calling its com
object
via python. However, I keep getting error message that says Python
can't
find the attribute of certain function that I want to execute in
Matlab.
I know the com function is exist, it works just fine if I don't run
within thread.
Below is my sample code, any helps or comments are appreciated.
Thanks,
Tanto
import threading
from win32com.client import Dispatch
class MyThread ( threading.Thread ):
def __init__(self,matlab_command):
self.matlab_command = matlab_command
self.matlab_object = Dispatch('matlab.application.single')
threading.Thread.__init__(self)
def run(self):
execute = getattr(self.matlab_object,'Execute')
execute(self.matlab_command)
def awesome_dud(self):
execute = getattr(self.matlab_object,'Execute')
execute(self.matlab_command)
a = MyThread('a=1:1:100')
b = MyThread('b=1:1:200')
# Running matlab function through thread (It's not working)
# =========================================================
a.start()
b.start()
a.join()
b.join()
# Running matlab function not through thread (it's working)
# =========================================================
a.awesome_dud()
b.awesome_dud()
you just forgot to initialize the COM runtime for the separate thread.
try following:
def __init__(self,matlab_command):
self.matlab_command = matlab_command
threading.Thread.__init__(self)
def run(self):
import pythoncom
pythoncom.CoInitialize()
try:
matlab_object = Dispatch('matlab.application.single')
execute = getattr(matlab_object,'Execute')
execute(self.matlab_command)
finally:
matlab_object = None
pythoncom.CoUnitialize()
Stefan