簡體   English   中英

PostgreSQL PL / Python如何在性能方面與Python之外的Python進行比較?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM