我运行完全相同的
Python函数,一个作为Postgresql PL / Python,另一个作为通常的Python脚本在Postgresql之外运行.
令人惊讶的是,当我使用select * from pymax7(20000);调用Postgresql PL / Python时,它平均花费65秒,而当我调用通常的Python脚本python myscript.py 20000时,它平均需要48秒.计算运行查询和脚本10次的平均值.
是否应该有这样的差异? Postgresql RDBMS(PL / Python)中的Python如何在性能方面与Python之外的Python进行比较?
我在Ubuntu 12.04 64位上运行Postgresql 9.1和Python 2.7.
Postgresql PL / Python:
CREATE FUNCTION pymax7 (b integer) RETURNS float AS $$ a = 0 for i in range(b): for ii in range(b): a = (((i+ii)%100)*149819874987) return a $$LANGUAGE plpythonu;
Python:
import time import sys def pymax7 (b): a = 0 for i in range(b): for ii in range(b): a = (((i+ii)%100)*149819874987) # keeping Python busy return a def main(): numIterations = int(sys.argv[1]) start = time.time() print pymax7(numIterations) end = time.time() print "Time elapsed in Python:" print str((end - start)*1000) + ' ms' if __name__ == "__main__": main()
应该没有任何区别.两个测试用例对我来说都有大约相同的运行时间,53秒加减1.
我确实调整了PL / Python测试用例,使用与普通Python测试用例相同的测量技术:
CREATE FUNCTION pymax7a (b integer) RETURNS float AS $$ import time start = time.time() a = 0 for i in range(b): for ii in range(b): a = (((i+ii)%100)*149819874987) end = time.time() plpy.info("Time elapsed in Python: " + str((end - start)*1000) + ' ms') return a $$LANGUAGE plpythonu;
这将告诉您是否涉及任何非Python开销. FWIW,对我来说,这个打印和客户端打印的psql与总时间之间的差异始终小于1毫秒.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。