Python 分析 'psycopg2._psycopg.cursor' 需要很长时间
Python Profiling 'psycopg2._psycopg.cursor' takes long time
我试图分析我的 python 脚本,以弄清楚为什么处理数据需要这么长时间。使用 cProfile 和 pstats,我得到了这个结果:
Tue Jan 20 08:49:08 2015 C:/Python27/profilingResults/profile_dump_1
24236665 function calls (24236295 primitive calls) in 1566.843 seconds
Random listing order was used
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\numbers.py:270(Rational)
2745 0.003 0.000 0.010 0.000 C:\Python27\Lib\decimal.py:1768(_round_half_even)
2 0.000 0.000 0.000 0.000 C:\Python27\Lib\calendar.py:71(__init__)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\logging\__init__.py:458(format)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\logging\__init__.py:1281(handle)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\atexit.py:6(<module>)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\decimal.py:321(Overflow)
9539 1548.536 0.162 1548.536 0.162 {method 'execute' of 'psycopg2._psycopg.cursor' objects}
最后一行好像不太对,但我没听懂。为什么光标会导致此成本?
import psycopg2 as psycopg
try:
connectStr = "dbname='postgis20' user='postgres' password='' host='localhost'"
cx = psycopg.connect(connectStr)
cu = cx.cursor()
logging.info("connected to DB")
except:
logging.error("could not connect to the database")
global cx
try:
cu.execute("INSERT INTO taxi (userid,carNum) SELECT '"+str(msg['UserID'])+"',"+str(msg['CarNumber']))
cu.execute
cu.execute
cu.execute
cu.execute
..
..
..
.
except Exception, err:
print('ERROR: %s\n' % str(err))
cx.commit()
cx.commit()
游标成本是由于调用了第二个代码块中的执行函数。(通常执行 sql 查询并返回结果比任何原始操作花费的时间都多一点)
您可以在分析方面找到很多帮助 here
您有 9539 个插入,每个插入 0.162 毫秒。听起来很正常。您可以使用批量插入或 copy_from 来加速整个过程。
我试图分析我的 python 脚本,以弄清楚为什么处理数据需要这么长时间。使用 cProfile 和 pstats,我得到了这个结果:
Tue Jan 20 08:49:08 2015 C:/Python27/profilingResults/profile_dump_1
24236665 function calls (24236295 primitive calls) in 1566.843 seconds
Random listing order was used
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\numbers.py:270(Rational)
2745 0.003 0.000 0.010 0.000 C:\Python27\Lib\decimal.py:1768(_round_half_even)
2 0.000 0.000 0.000 0.000 C:\Python27\Lib\calendar.py:71(__init__)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\logging\__init__.py:458(format)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\logging\__init__.py:1281(handle)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\atexit.py:6(<module>)
1 0.000 0.000 0.000 0.000 C:\Python27\Lib\decimal.py:321(Overflow)
9539 1548.536 0.162 1548.536 0.162 {method 'execute' of 'psycopg2._psycopg.cursor' objects}
最后一行好像不太对,但我没听懂。为什么光标会导致此成本?
import psycopg2 as psycopg
try:
connectStr = "dbname='postgis20' user='postgres' password='' host='localhost'"
cx = psycopg.connect(connectStr)
cu = cx.cursor()
logging.info("connected to DB")
except:
logging.error("could not connect to the database")
global cx
try:
cu.execute("INSERT INTO taxi (userid,carNum) SELECT '"+str(msg['UserID'])+"',"+str(msg['CarNumber']))
cu.execute
cu.execute
cu.execute
cu.execute
..
..
..
.
except Exception, err:
print('ERROR: %s\n' % str(err))
cx.commit()
cx.commit()
游标成本是由于调用了第二个代码块中的执行函数。(通常执行 sql 查询并返回结果比任何原始操作花费的时间都多一点)
您可以在分析方面找到很多帮助 here
您有 9539 个插入,每个插入 0.162 毫秒。听起来很正常。您可以使用批量插入或 copy_from 来加速整个过程。