unload/delete modules

Sebastien de Menten sdementen at hotmail.com
Wed Feb 12 08:48:45 EST 2003


Jp Calderone <exarkun at intarweb.us> wrote in message news:<mailman.1044995379.6060.python-list at python.org>...
> On Tue, Feb 11, 2003 at 06:47:20AM -0800, Sebastien de Menten wrote:
> > Hi,
> > 
> > I have done some research on the topic but it is still very fuzzy...
> > 
> > I have the following script
> > 
> > for i in range(5):
> > 	create module foo with function run that print i(i)
> > 	import foo
> > 	foo.run()
> > 
> > The function "create module foo with function run that print i(i)" :
> >  - write a .pyx file (Pyrex file), with code for printing the argument
> > i
> >  - translate the file with Pyrex in c code
> >  - compile the c code to get a foo.so module.
> > 
> 
>   There is no platform-independant way to unload shared object libraries
> (even doing it correctly on different releases of the same platform can be a
> challenge), and so Python makes absolutely zero attempt to have reload()
> work on .so modules.
> 
> > [snip]
> > Is there a solution for my problem ?
> 
>   I'm not sure you've told us your problem ;)  You have told us one solution
> you've selected to your problem, and the problems that *it* has, though.  So
> I think I can say that there is no solution to this solution.  Maybe you can
> tell us the real problem you're trying to address, and we can all try and
> come up with a different solution.
> 
> 

The problem is performance...
Basically, i need to run a code that looks like this

for i in range(S):
	x = 0
	for i in range(T):
		x += A*x + b
	do_some_more_stuff_with(x)

where
 - A is an array of size NxN
 - b is a vector of size N
 - x is a vector of size N
 - S and T ~ 10000
 - N ~ 10
and the operations =,+= and + are vector based and * is the
matrix-vector multiplication

I can't do it in python as it is too slow so I must write it in C and
call it from Python. The additional characteristic is that A is very
sparse and taking that into account can increase performance by 20 on
a simple example.

Hence, I want to generate the code for "x += A*x + b" on the fly for a
given matrix A and vector b (known when generating the code). I do
this by generating Pyrex code and loading the module Pyrex creates.

However, if I modify A or b and regenerate a module, I can't load it
anymore as the module is already imported!

... any thoughts




More information about the Python-list mailing list