我是否可以在我的pygame游戏中找到昂贵的函数(例如,A* 寻路),并将它们重写为here的扩展?这样做有没有速度上的好处?有没有更好的(python)解决方案?我问这个问题是因为我刚开始学习C,因为不相关的原因,当我回到Python和pygame时,这可能是一个好主意。
t3psigkw1#
这样做是否有速度优势?如果不知道你到底在做什么,就不可能说出来,但一般的答案是“很有可能”。有没有更好的解决方案(Python)?再说一次,这不可能说。比什么更好?如果您正在使用数值数组,那么第一步可能应该使用NumPy。一旦你做到了这一点,除了在原始C中编码扩展之外,还有多种途径可以加速事情:
最后,如果您发现自己正在编写C或C++扩展,请考虑使用SWIG或Boost.Python。
cxfofazt2#
你可以使用cProfile来查找代码中开销最大的函数。我很确定你将一些代码迁移到C语言后,你会看到性能的提高。从我的测试来看,根据你的代码,它可以是2倍到200倍的提高。最简单的方法是将昂贵的函数移到单独的模块中,添加变量声明并用Cython编译它们,然后将它们导入到主程序中,就像它们是python模块一样。这里有一个很棒的教程,你可以使用不同的方法来优化你的代码,包括profiling和Cython:http://ianozsvald.com/HighPerformancePythonfromTrainingatEuroPython2011_v0.2.pdf
2条答案
按热度按时间t3psigkw1#
这样做是否有速度优势?
如果不知道你到底在做什么,就不可能说出来,但一般的答案是“很有可能”。
有没有更好的解决方案(Python)?
再说一次,这不可能说。比什么更好?
如果您正在使用数值数组,那么第一步可能应该使用NumPy。
一旦你做到了这一点,除了在原始C中编码扩展之外,还有多种途径可以加速事情:
最后,如果您发现自己正在编写C或C++扩展,请考虑使用SWIG或Boost.Python。
cxfofazt2#
你可以使用cProfile来查找代码中开销最大的函数。我很确定你将一些代码迁移到C语言后,你会看到性能的提高。从我的测试来看,根据你的代码,它可以是2倍到200倍的提高。
最简单的方法是将昂贵的函数移到单独的模块中,添加变量声明并用Cython编译它们,然后将它们导入到主程序中,就像它们是python模块一样。
这里有一个很棒的教程,你可以使用不同的方法来优化你的代码,包括profiling和Cython:
http://ianozsvald.com/HighPerformancePythonfromTrainingatEuroPython2011_v0.2.pdf