可能的重复:
如何分析 Python 脚本?
您知道哪些可视化工具,类似于 Java 的 JProfiler,可以分析 Python 应用程序的性能?
我注意到,manage.py runserver为我正在开发的Django项目启动开发Web服务器需要花费大量时间.我想知道是否有办法了解启动的哪个部分需要如此多的资源,最终能够收集足够的信息来解决问题.
任何人都知道我该怎么办?
我有一个Django应用程序,它在低负载下工作并且响应很好,但在高负载(如100个用户/秒)时,它消耗100%的CPU,然后由于缺乏CPU速度减慢.
问题:
那么,如何找到一段代码所消耗的CPU周期呢?
由于降低CPU消耗会增加响应时间.
要么
更多信息
ujson了JSON解析.很想知道:
我一直在研究Python 3中的一些Project Euler问题[osx 10.9],我想知道它们运行了多长时间.
我一直在使用以下两种方法为我的程序计时:
1)
import time
start = time.time()
[program]
print(time.time() - start)
Run Code Online (Sandbox Code Playgroud)
2)在bash命令行上输入 time python3 ./program.py
但是,这两种方法往往会产生不同的结果.在我正在处理的程序中,第一个返回0.000263(秒,截断)而第二个返回
real 0m0.044s
user 0m0.032s
sys 0m0.009s
Run Code Online (Sandbox Code Playgroud)
显然存在巨大的差异 - 与real时间相比有两个数量级.
我的问题是:
a)为什么会有区别?这是解释器的开销吗?
b)我应该使用哪一个来准确确定程序运行的时间?是time.time()准确的,在如此小的间隔?
我意识到这些微不足道的时间并不是最重要的; 这更像是一种好奇心.
谢谢.
[ 更新: ]
感谢所有的答案和评论.你的开销是正确的.这个程序:
import time
start = time.time()
print("hello world")
print(time.time() - start)
Run Code Online (Sandbox Code Playgroud)
据bash说,需要大约0.045秒.
据bash说,我复杂的Project Euler问题耗时约0.045秒.问题解决了.
我来看看timeit.谢谢.
我是很新的,以用Cython,但我已经经历了非凡的加速只复制我.py来.pyx(和cimport cython,numpy等等),并导入到ipython3用pyximport.许多教程都是从这种方法开始的,下一步是cdef为每个数据类型添加声明,我可以为for循环中的迭代器做.但与大多数Pandas Cython教程或示例不同,我不应用函数,可以这么说,更多使用切片,求和和(等)来操纵数据.
所以问题是:我可以通过声明我的DataFrame只包含floats(double),并且列是int行和行来增加代码运行的速度int吗?
如何定义嵌入列表的类型?即[[int,int],[int]]
这是一个为DF分区生成AIC分数的示例,对不起它是如此冗长:
cimport cython
import numpy as np
cimport numpy as np
import pandas as pd
offcat = [
"breakingPeace",
"damage",
"deception",
"kill",
"miscellaneous",
"royalOffences",
"sexual",
"theft",
"violentTheft"
]
def partitionAIC(EmpFrame, part, OffenceEstimateFrame, ReturnDeathEstimate=False):
"""EmpFrame is DataFrame of ints, part is nested list of ints, OffenceEstimate frame is DF of float"""
"""partOf/block is a …Run Code Online (Sandbox Code Playgroud) 理想情况下,我想要记录执行深度神经网络Keras模型的Python脚本的CPU使用情况。我正在寻找与CPU等效的memory_profiler,它提供了进程的内存消耗。
我看过使用psutil(在此答案中建议),这表明我的脚本可能包含的某些变体。
p = psutil.Process(current_pid)
p.cpu_percent()
Run Code Online (Sandbox Code Playgroud)
但问题是我真正想捕获效果的重要函数调用将是模型的推断阶段
model.predict(x_test)
Run Code Online (Sandbox Code Playgroud)
如果在此步骤之前/之后运行psutil,则记录的CPU使用率将无法真正反映该进程的CPU使用率。
因此,我当时在考虑是否可以使用top / htop之类的东西将脚本的CPU使用率记录到某个文件中,捕获进程运行时CPU的使用情况波动,然后在事后计算平均值(或类似值)。但是,我看到的问题是,我是否不需要知道PID才能使用top,所以在执行脚本之前(甚至还没有分配PID的情况下)如何使用top监视脚本?
我可以看到这个排名很高的答案建议使用cProfile,它可以提供脚本中函数的运行时间。尽管这并不是我想要的,但我注意到它返回了CPU秒总数,这至少可以让我比较这方面的CPU使用率。
我想比较两个片段的执行时间,看看哪一个更快。因此,我想要一种准确的方法来测量 python 代码片段的执行时间。
我已经尝试过使用time.time()、time.process_time()、time.perf_counter_ns()以及timeit.timeit(),但我面临着与所有这些相同的问题。也就是说:当我使用上述任何方法来测量同一代码片段的执行时间时,每次运行它时它都会返回不同的值。这种变化有些显着,以至于我无法可靠地使用它们来比较两个片段的执行时间差异。
例如,我在我的 google colab 中运行以下代码:
import time
t1 = time.perf_counter()
sample_list = []
for i in range(1000000):
sample_list.append(i)
t2 = time.perf_counter()
print(t2 - t1)
Run Code Online (Sandbox Code Playgroud)
我运行上面的代码 10 次,结果的变化约为 50%(最小值 = 0.14,最大值 = 0.28)。
还有其他选择吗?
我正在尝试优化 pyOpenCL 程序。出于这个原因,我想知道是否有办法分析程序并查看大部分时间需要在哪里。
你知道如何解决这个问题吗?
提前
致谢安迪
编辑:例如,用于 CUDA 的 nvidias nvprof 可以用于 pyCuda,但不适用于 pyOpenCL。
我正在从一些类似于以下内容的文本文件中解析日期/时间/测量信息:
[Sun Jul 15 09:05:56.724 2018] *000129.32347
[Sun Jul 15 09:05:57.722 2018] *000129.32352
[Sun Jul 15 09:05:58.721 2018] *000129.32342
[Sun Jul 15 09:05:59.719 2018] *000129.32338
[Sun Jul 15 09:06:00.733 2018] *000129.32338
[Sun Jul 15 09:06:01.732 2018] *000129.32352
Run Code Online (Sandbox Code Playgroud)
结果进入输出文件,如下所示:
07-15-2018 09:05:56.724, 29.32347
07-15-2018 09:05:57.722, 29.32352
07-15-2018 09:05:58.721, 29.32342
07-15-2018 09:05:59.719, 29.32338
07-15-2018 09:06:00.733, 29.32338
07-15-2018 09:06:01.732, 29.32352
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码如下所示:
import os
import datetime
with open('dq_barorun_20180715_calibtest.log', 'r') as fh, open('output.txt' , 'w') as fh2:
for line in fh:
line = line.split()
monthalpha = …Run Code Online (Sandbox Code Playgroud) 最近有人对我说“在 Python 中,最好稍后尝试请求宽恕,而不是乞求许可”,我觉得这很有趣,但也与我的问题相关
我正在创建一个名为 Ada 的个人助理,并且对性能非常迂腐。据我所知,使用 try 语句比检查然后执行更快。EG:(如果目录不存在,第二个会慢一些???)
import os
try:
os.makedirs("Test")
except FileExistsError:
pass
# VS
if not os.path.exists("Test"):
os.makedirs("Test")
Run Code Online (Sandbox Code Playgroud)
因此,在创建编码时,您需要权衡更有可能的情况。在我的示例中,文件更有可能不存在,因此我应该使用 try 块,它比 If-Else 产生更好的性能
我想知道尝试(双关语)这种默认 If-Else 方法是否有任何好处?
PS(这个问题不是Python if 与 try- except的重复,因为它没有指定比较代码块的概率try:)
如果有人感兴趣,我当前的代码:(在 AppData 中创建一个名为 Ada 的文件夹,其中包含 Config.ini 文件)
import os
AppDataDirectory = os.getenv("AppData")
AdaDirectory = AppDataDirectory + "\Ada"
ConfigFile = AdaDirectory + "\CONFIG.ini"
try:
File = open(ConfigFile, "r")
except FileNotFoundError:
try:
os.makedirs(AdaDirectory)
except FileExistsError:
print("Config File Missing")
# Setup Config …Run Code Online (Sandbox Code Playgroud)