我编写了一个 Python 脚本,使用 pyodbc 将数据从 excel 表传输到 ms 访问,还使用 matplotlib 使用 excel 表中的一些数据来创建绘图并将它们保存到文件夹中。当我运行脚本时,它完成了我的预期;然而,我用任务管理器监控它,它最终使用了超过 1500 MB 的 RAM!
我什至不明白这怎么可能。它创建了 560 张图像,但这些图像的总大小仅为 17 MB。excel表格为8.5 MB。我知道,如果不查看我的所有代码,您可能无法确切地告诉我问题出在哪里(我不知道到底是什么问题,所以我只需要发布整个内容,我认为这不合理要求您阅读我的整个代码),但一些一般准则就足够了。
谢谢。
更新
我按照@HYRY 的建议做了,并拆分了我的代码。我首先只使用 matplotlib 函数运行脚本,然后不使用它们。正如迄今为止评论过的人所怀疑的那样,内存猪来自 matplotlib 函数。现在我们已经缩小了范围,我将发布我的一些代码。请注意,下面的代码在两个 for 循环中执行。内部 for 循环将始终执行四次,而外部 for 循环执行但需要执行多次。
#Plot waveform and then relative harmonic orders on a bar graph.
#Remember that table is the sheet name which is named after the ExperimentID
cursorEx.execute('select ['+phase+' Time] from ['+table+']')
Time = cursorEx.fetchall()
cursorEx.execute('select ['+phase+' Waveform] from ['+table+']')
Current = np.asanyarray(cursorEx.fetchall())
experiment = table[ :-1]
plt.figure()
#A scale needs to be added to the primary current values
if line == 'P':
ratioCurrent = Current / 62.5
plt.plot(Time, ratioCurrent)
else:
plt.plot(Time, Current)
plt.title(phaseTitle)
plt.xlabel('Time (s)')
plt.ylabel('Current (A)')
plt.savefig(os.getcwd()+'\\HarmonicsGraph\\'+line+'H'+experiment+'.png')
cursorEx.execute('select ['+phase+' Order] from ['+table+']')
cursorEx.fetchone() #the first row is zero
order = cursorEx.fetchmany(51)
cursorEx.execute('select ['+phase+' Harmonics] from ['+table+']')
cursorEx.fetchone()
percentage = np.asanyarray(cursorEx.fetchmany(51))
intOrder = np.arange(1, len(order) + 1, 1)
plt.figure()
plt.bar(intOrder, percentage, width = 0.35, color = 'g')
plt.title(orderTitle)
plt.xlabel('Harmonic Order')
plt.ylabel('Percentage')
plt.axis([1, 51, 0, 100])
plt.savefig(os.getcwd()+'\\HarmonicsGraph\\'+line+'O'+experiment+'.png')