1) The memory overhead is the main one, as described in other answers. You also pay the compilation cost, which can be prohibitive if you aren’t selective. From the user reference:
Compiling everything is often overkill for medium- or large-sized applications. The drawbacks of compiling too much are in the time spent compiling, plus the amount of memory that this process consumes. It is a subtle balance to keep.
2) Performance can actually be harmed by Psyco compilation. Again from the user guide (“known bugs” section):
There are also performance bugs: situations in which Psyco slows down the code instead of accelerating it. It is difficult to make a complete list of the possible reasons, but here are a few common ones:
- The built-in
map
andfilter
functions must be avoided and replaced by list comprehension. For example,map(lambda x: x*x, lst)
should be replaced by the more readable but more recent syntax[x*x for x in lst]
.- The compilation of regular expressions doesn’t seem to benefit from Psyco. (The execution of regular expressions is unaffected, since it is C code.) Don’t enable Psyco on this module; if necessary, disable it explicitely, e.g. by calling
psyco.cannotcompile(re.compile)
.
3) Finally, there are some relatively obscure situations where using Psyco will actually introduce bugs. Some of them are listed here.