Having issues running a python script with threading from within matlab. It appears that matlab stops the python interpreter much of the time. At the end of the message I have a python script that starts a thread and looks at its iterations, without and with a small amount of sleep within the script.
My python version is 2.7.9 64bit. No other versions of python have been installed (clean machine built 2 weeks ago)
Lots of iterations when run from the DOS command line :
>>python process_test.py
run for 3.0 seconds:
2485 585859 1126612 1669999 2208775 2754896 3226523
iterations no sleep :  3226523
1 501 1000 1500 2000 2497 2997
iterations with sleep :  2998
Or even from within matlab when using system:
system('python process_test.py')
But, using a matlab script:
insert(py.sys.path,int32(0),'.');
p = py.process_test.process_test(0.001,3);
ts = now + 5/86400.;
while now < ts 
    disp(p.cnt);
    pause(0.5);
end
disp(sprintf('Iterations w sleep %d', p.cnt));
There are zero iterations (with or without python sleep)
However, starting from the matlab command line and can poll and get some cnts. p = py.process_test.process_test(0.001,3); wait a bit then type p.cnt or p to see all the members
My final application is real-time plotting with python reading data from a TCPIP connection in a thread. In this case, the thread does run, but not enought or consistently. I suspect that calling drawnow expose many many times per sec was giving the python interpreter a chance to run.
The python script "process_test.py" follows:
import threading
import time, sys
class process_test(threading.Thread) :
      def __init__(self, sleep_tm=0.001, watchdog_timeout=5) :
          self.cnt = 0;
          self.sleep_tm = sleep_tm;
          self.terminate = False
          self.time_of_last_watchdog = time.clock();
          self.watchdog_timeout = watchdog_timeout;
          threading.Thread.__init__(self)
          self.start()
      def __del__(self) :
          self.terminate = True
      def run(self) :
          self.time_of_last_loop = time.clock()
          while not self.terminate :
              self.cnt += 1
              t = time.clock()
              dt = t - self.time_of_last_watchdog;
              if dt > self.watchdog_timeout:
                  self.terminate = True
              dt = t - self.time_of_last_loop
              self.time_of_last_loop = t;
              if self.sleep_tm > 1.0e-4 :  #
                  time.sleep(self.sleep_tm);
if __name__ == "__main__" :
      tmout = 3;
      print "run for %.1f seconds:" 
      p = process_test(0,tmout)
      ts = time.clock() + tmout+0.1;
      while time.clock() < ts :
          print p.cnt,
          time.sleep(0.5)
      print
      print "iterations no sleep : ", p.cnt
      print
      print
      p = process_test(0.001, tmout)
      ts = time.clock() + tmout + 0.1;
      while time.clock() < ts:
          print p.cnt,
          time.sleep(0.5)
      print
      print "iterations with sleep : ", p.cnt
      sys.exit()