I have a multi thread python code, threads can start immediately if I run on command line, but I can get them started right the way if I call the same code from C/C++.
test code like this: from threading import Thread import thread class testThread(Thread): def __init__ (self, id): Thread.__init__(self) self.id = id def run(self): print " >>> thread ", self.id, " started" j = 0 for i in range(1, 2000): j = j+1 print " <<< thread ", self.id, " ended" def run(): t1 = testThread(1); t2 = testThread(2); t3 = testThread(3); print "> start t1" t1.start(); print "> start t2" t2.start(); print "> start t3" t3.start(); If run this from command line, I get result immediately: > start t1 >>> thread 1 started <<< thread 1 ended > start t2 > start t3 return from run() call >>> >>> thread 2 started <<< thread 2 ended >>> thread 3 started <<< thread 3 ended If I call this py code from c as: Py_Initialize(); PyEval_InitThreads(); PyRun_SimpleString("import ****\n****.run()\n"); for (j=0; j<3; j++) { for (i=0; i<1000000; i++) { } PyRun_SimpleString("print 'kick python'\n"); sleep(1); printf("sleep\n"); } printf("---------------- before Finalize()\n"); Py_Finalize(); printf("---------------- after Finalize()\n"); When c code is doing busy loop or sleeping, python thread can not run. they can only be executed when Py_Finalize(); is called. out put is like: > start t1 > start t2 >>> thread 1 started > start t3 return from run() call kick python sleep kick python sleep kick python sleep ---------------- before Finalize() >>> thread 2 started >>> thread 3 started <<< thread 3 ended <<< thread 2 ended <<< thread 1 ended ---------------- after Finalize() ____________________________________________________________________________________ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs -- http://mail.python.org/mailman/listinfo/python-list