embed threaded python code, thread won't start right the way

Yue Fei yue_f at yahoo.com
Wed Dec 19 21:45:28 EST 2007


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



More information about the Python-list mailing list