我目前正在做一个基准测试项目,我在其中运行不同的测试并将其运行时存储在文件中。然后我获取这些输出并创建一个图形,然后将测试运行与其先前的结果进行比较。有些代码非常复杂,很长一段时间以来一直困扰着我,为什么我有时会得到比我应该更多的情节。我会尝试提供所有相关信息。
每个测试都有多个数据集,并存储在.txt中,如下所示:
name: runtime
Example: dataset #1: 8198
我使用glob.glob找到了所有旧的测试,它运行得很好。它只从相同的测试中找到较旧的结果。我知道问题不在于找到结果。结果也很好,有时结果无效,但我把它们过滤得很好,所以只使用了有效的结果。
我从我刚刚得到的结果中取出路径,并通过查找所有较旧的结果来创建图表。我创建了一个从0到n的空列表(调用x),我用它来制作xticks,因为我想在x轴上自定义刻度(提交名称)。
# Get all older and current results from a given test
outputs = getValidResults(path)
# Stores the runs in a list like:
# [[dataset1 run1, dataset1 run2],[datset2 run1, dataset2 run2]]
runs = getAllRuns(outputs)
# Names used for xticks
commits = getAllCommits(path)
# Name of the test
testName = getTestName(path)
x = []
for m in range(0, len(outputs)):
x.append(m)
for n in range(0, dataset_amount):
y = []
for run in runs:
y.append(run[n])
plt.xticks(x, commits, rotation=70)
logger.debug('x is: {} and y is: {}'.format(x,y))
plt.plot(x, y, 'o-')
plt.ylabel('Build/run time in microseconds')
plt.xlabel('Commit')
lgd = plt.legend(datasets, bbox_to_anchor=(1, 0.5), loc='center left', fancybox=True)
plt.title(testName)
plt.grid(True)
plt.tight_layout()
plt.savefig(savePath, bbox_extra_artists=(lgd,), bbox_inches='tight')
现在您将注意到,无论何时绘制x和y值,我都会记录。当我查看我的日志时,我得到了,它只尝试添加一个情节,即使这样两个都是空的:
[2016-06-02 11:29:16,684] - {DEBUG:htmlgen.py:197} - x is: [] and y is: []
然而,它仍然会保存图表,而出现的图表是:
结果都是错误的,首先您可以在图例中看到此测试只有一个数据集。它不可能有多个。另一个有趣的事情是,图表上的结果来自另一个在此之前创建的测试。这让我相信它会以某种方式重复使用相同的结果,这可能是一个内存问题吗?
我试图记录每个变量,并且它们都是空的,期望数据集是正确的:
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:167} - Average is: []
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:168} - Commits found: [].
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:169} - Datasets found: ['fluid-n_steps=1-n_solver_steps=40-grid_res=100.input:'].
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:170} - Dataset length: 1
[2016-06-02 11:29:16,650] - {DEBUG:htmlgen.py:171} - Outputs found: []
[2016-06-02 11:29:16,683] - {DEBUG:htmlgen.py:180} - Trying to create plot points...
[2016-06-02 11:29:16,684] - {DEBUG:htmlgen.py:197} - x is: [] and y is: []
[2016-06-02 11:29:16,686] - {DEBUG:htmlgen.py:199} - Successfully created plot points.
它根本找不到任何结果,但不知何故仍然会生成图形,即使它实际上没有在代码中绘制任何内容。
有趣的是,我制作的第一张图总是很好。但是,从第二个图表和图表中重新使用首先创建的图表的结果。
有没有人经历或看过这样的事情? matplotlib重新使用前面创建的图形中的数据点,而不是实际的图形中的数据点?