[英]How does PostgreSQL PL/Python compare with Python outside it in terms of performances?
我運行完全相同的Python函數,一個作為PostgreSQL PL / Python,另一個作為通常的Python腳本在PostgreSQL之外運行。
令人驚訝的是,當我使用select * from pymax7(20000);
調用PostgreSQL PL / Python時select * from pymax7(20000);
它平均需要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;
蟒蛇:
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毫秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.