pbkdf2_hmac在django中花费很长时间

时间:2019-03-03 00:04:10

标签: python django django-rest-framework

我正在对django rest框架API进行一些性能分析,并使用基于cProfile的性能分析中间件,得到以下输出:

Sat Mar  2 23:55:13 2019    /var/folders/jr/something
41224 function calls (40529 primitive calls) in 0.182 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    1    0.124    0.124    0.124    0.124 {built-in method _hashlib.pbkdf2_hmac}
   11    0.006    0.001    0.007    0.001 {method 'execute' of 'psycopg2.extensions.cursor' objects}
  252    0.003    0.000    0.003    0.000 {built-in method posix.stat}
   11    0.002    0.000    0.009    0.001 /Users/my-local-user/.pyenv/versions/3.7.0/lib/python3.7/traceback.py:312(extract)

基于此,一次调用_hashlib.pbkdf2_hmac会花费我总执行时间的70%!

除了在openSSL中使用过的信息外,我没有找到很多相关信息-但我在本地运行而没有ssl。

为什么我这么多时间都花在了一个简单的API请求的加密功能上?

1 个答案:

答案 0 :(得分:2)

pbkdf2设计为运行缓慢。由于它的目的是很难计算,因此强行执行会花费很多时间。

如果您希望具有不那么慢的性能分析数据,则可以调低此计算所进行的迭代次数。有关更多详细信息,请参见Password management in Django。请记住仅针对测试和分析进行调优,因​​为在生产环境中以低迭代次数运行它会带来安全风险!