Hi,

I have a program that generates source code for a function. I need to compile that function so that it can be executed (relatively) fast later. In most cases, I'll be generating about 10 functions per second, and evaluate them frequently. But sometimes I'll have to generate 100 functions per second (upper limit). I also need to change the dict of global variables that are accessible from that function. Here is the dilemma:

   * the eval function can only be used to evaluate expressions. The
     source code of the generated function is too complex to be put
     into a lambda expression. The def statement is not handled by
     eval(), so I cannot use eval().
   * the exec statement can be used to execute a def statement.
     However, I see no way to change the globals, so I cannot use the
     exec statement.
   * the execfile statement could do everything that I want (e.g.
     support statements + changing globals). But.... I cannot pass the
     source code as a string. Looks like I MUST give a file name as the
     first argument. Even worse, this can't be a temporary file
     (because it has no name on some systems). This I consider a
     security problem. Yes, I know that I might be able to create a
     directory with good permissions, and then write out 10-100 files
     in every second for compiling... but it seems a waste of time, and
     why would I create 100 files per second on an unknown filesystem
     when I only need to pre-compile some functions?

Are there any other options? (Python 2.7 + numpy, should be compatible with Windows, Linux and FreeBSD)

Thanks,

   Laszlo

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to