Threads on embedded Python

Ugo García plugin at supercable.es
Tue Jun 25 14:11:18 EDT 2002


thanks Chris. The URL you give me is very interesting. Pufff, this is a big
mess... Don't know exactly how to do it. Perhaps could be a good idea to
have the main loop in Python...

But, one question: you say that I don't have to have a main loop in order to
have threads running using Py_BEGIN_ALLOW_THREADS, but don't known exactly
how to use it. I explain: from the main loop in my C application I launch
threads in python using PyRun_SimpleString. But these threads doesn't run
unless I call Python to do something. How I have to use
Py_BEGIN_ALLOW_THREADS in order not to call Python continuosly?

Thanks again,
--ugo

"Chris Liechti" <cliechti at gmx.net> escribió en el mensaje
news:Xns9238944DA0FEcliechtigmxnet at 62.2.16.82...
> "Ugo García" <plugin at supercable.es> wrote in
> news:1024957605.771843 at seux119:
>
> > Let see if I get something clear... I don't have any main loop in
> > Python. I only have some functions that 'control' certains object in
> > my operation. To be a little more clear, the task of the functions are
> > for example, move an object in the world generated by a game with a
> > little intelligence. For example: (a simple example)
> >
> > FUNCTION 1:
> >     - Wait until main character is in correct position
> >     - Play a sound
> >     - Move an enemy from pos X1,Y1 to X2,Y2
> >     - Play an animation
> >     - ....
> >     - ....
> >
> > So, I don't have a main loop, only function like that (and other kind
> > of functions) that a run as a thread to have all them running
> > simultaneous. Is there other way to do that without having threads?
>
> sure, it's called polling ;-)
>
> and i think this one could be an iteresting read for you:
> http://www-106.ibm.com/developerworks/library/l-pythrd.html
> it's a good way to distribute CPU power to different 'microthreads' while
> having  them well separated. altough you will need polling as microthreads
> don't support blocking IO.
>
>
> why not hanging it up the other way round? i think if you have the main
> loop in python the thing will get easier. you can then call back to your C
> module to do the screen updates etc.
>
> > Do
> > I have to have a main loop in order to have the threads running?
>
> when you're in a C module the Global Interpreter Lock stopps all python
> activity util you enable it explicitly (Py_BEGIN_ALLOW_THREADS) or you
> return to python.
> the GIL makes writing extensions to python peanuts...
>
> > Perhaps running Python in a separate thread could be a good idea.
>
> yes someone has to spend the CPU cycles...
>
> > Thanks,
> > --ugo
> > "Chris Liechti" <cliechti at gmx.net> escribió en el mensaje
> > news:Xns9237EECAA9CC5cliechtigmxnet at 62.2.16.82...
> >> "Ugo García" <plugin at supercable.es> wrote in
> >> news:1024952585.111238 at seux119:
> >>
> >> > Hi all. I have an applicattion who uses Python to control some
> >> > processes. I've made a little script library to work with threads
> >> > and each proccess is a Python thread. The main application make
> >> > calls to Python in order to create these proccesses. The problem is
> >> > that the proccess doesn't run unless I call Python to do something.
> >> > Now in the main loop I have a line like this:
> >> >     PyRun_SimpleString("dummy=1");
> >> >
> >> > This make Python the threads to run. The problem is that this is a
> >> > little slow 'cause if I call Python from tha main application too
> >> > many times the proccesses run well but not the main application,
> >> > and if a make a big pause between calls the proccesses doesn't work
> >> > at a good speed. Is posible to have some threads running in an
> >> > embedded Python without making callings to it continuosly? It would
> >> > be a better idea to have another thread who's only task is to call
> >> > Python (a line that the one written before) in order to have the
> >> > Python proccesses running?
> >>
> >> why not run python in a separate thread (created by your app) and
> >> doing
> > the
> >> loop in python, like PyRun_SimpleString("while 1: mainloop()") or so?
> >> you do have a main loop in python, don't you? otherwise you wouldn't
> >> need python threads, right? :-)
> >>
> >> you could possibly also release the GIL, but don't forget to grab it
> >> again when accessing the python interpreter. i'm not sure about this
> >> one, so i would try the above.
> >>
> >> chris
> >>
> >> --
> >> Chris <cliechti at gmx.net>
> >>
> >
> >
> >
>
>
>
> --
> Chris <cliechti at gmx.net>
>





More information about the Python-list mailing list