469,352 Members | 2,140 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,352 developers. It's quick & easy.

Performance profiling Python code

Hi,

I'm using the Python profiler to optimize a pathfinding algorithm of a
game, and would like some help from someone who knows how to improve the
performance of Python code. The algorithm is A-Star, and it works
correctly. However, the interface that I made between the A-Star
pathfinding algorithm and the map data structure is what I've found to be
a bottle-neck so far.

As a start, I'd like to optimize the methods with the highest cumulative
time spent using CPU, which are the ones on the top of the profiling
out-put attached below (get_tile_adjacent etc.)

So are you able to spot any solutions to improving the performance of the
methods which I've indentified as bottlenecks here?

Thanks in advance!
Andreas R.

The source code of the main faile is here:
http://svn.gna.org/viewcvs/openrts/t...89&view=markup

Profiling output is here:

ncalls tottime percall cumtime percall filename:lineno(function)
/home/andreas/openrts/openrts/openrts/common/map.py:190(get_tile_adjacent)
162002 0.680 0.000 0.680 0.000
/home/andreas/openrts/openrts/openrts/common/map.py:56(get_tile)
129600 0.570 0.000 0.570 0.000
/home/andreas/openrts/openrts/openrts/common/map.py:217(wrap_map_pos)
129837 0.480 0.000 0.480 0.000 :0(append)
8100 0.190 0.000 0.430 0.000
/home/andreas/openrts/openrts/openrts/common/map.py:253(get_tile_height_pos)
8100 0.080 0.000 0.270 0.000
/usr/lib/python2.4/random.py:213(randint)
8100 0.160 0.000 0.190 0.000
/usr/lib/python2.4/random.py:149(randrange)
1 0.000 0.000 0.170 0.170
/home/andreas/openrts/openrts/openrts/common/map.py:26(__init__)
1 0.070 0.070 0.170 0.170
/home/andreas/openrts/openrts/openrts/common/map.py:32(init_map)
8100 0.080 0.000 0.110 0.000
/home/andreas/openrts/openrts/openrts/common/map.py:234(get_tile_height)

Mar 24 '06 #1
2 1269
On Fri, Mar 24, 2006 at 09:33:55PM +0100, Andreas R?sdal wrote:
Hi,

I'm using the Python profiler to optimize a pathfinding algorithm of a
game, and would like some help from someone who knows how to improve the
performance of Python code. The algorithm is A-Star, and it works
correctly. However, the interface that I made between the A-Star
pathfinding algorithm and the map data structure is what I've found to be
a bottle-neck so far.

So are you able to spot any solutions to improving the performance of the
methods which I've indentified as bottlenecks here?


You have methods for accessing members, just access the members directly.
Differently worded: don't write try to write Java/C++ in python!
This will save you lots of function call overhead.

For the adjacent tiles you could compute the list once and store it in
the tiles (assuming the tiles don't move around).

As a last resort you can write the sensitive bits in C and add a python
wrapper. For the ICFP contest[1] each year I write the few primitives
in C and all the logic in python and it works quite well.

-Jack

[1] http://icfpcontest.org/
Mar 24 '06 #2
Em Sex, 2006-03-24 Ã*s 15:58 -0500, Jack Diederich escreveu:
As a last resort you can write the sensitive bits in C and add a python
wrapper. For the ICFP contest[1] each year I write the few primitives
in C and all the logic in python and it works quite well.


Before that, try Psyco. It helps a lot sometimes.

HTH,

--
Felipe.

Mar 24 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

25 posts views Thread by Brian Patterson | last post: by
5 posts views Thread by Kenneth McDonald | last post: by
reply views Thread by Robby Dermody | last post: by
3 posts views Thread by Peter Olcott | last post: by
18 posts views Thread by koorb | last post: by
30 posts views Thread by galiorenye | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.