Я написал своего рода демон для мониторинга файлов в каталоге и отправки электронного письма всякий раз, когда происходит изменение в любом из файлов.Я использовал bb-freeze для компиляции в Windows .exe.После нескольких дней работы я заметил, что она занимает все больше места в памяти.
Я использовал Heapy для мониторинга использования памяти в файле .py (нескомпилировал .exe) и обнаружил, что для каждого вызова функции количество объектов увеличивалось на 3 с соответствующим увеличением использования памяти на 484 байта.Он использует модуль smtplib, и я не могу понять, где происходит утечка.
from guppy import hpy
import time
import gc
import os
import smtplib
import mimetypes
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.MIMEAudio import MIMEAudio
from email.MIMEImage import MIMEImage
from email.Encoders import encode_base64
def sendMail(subject, text, to='blah@gmail.com', username='more.blah@gmail.com', password='blah', smtpServer='smtp.gmail.com', smtpPort=587):
gmailUser = username
gmailPass = password
recipient = to
msg = MIMEMultipart()
msg['From'] = gmailUser
msg['To'] = recipient
msg['Subject'] = subject
msg.attach(MIMEText(text))
mailServer = smtplib.SMTP(smtpServer, smtpPort)
mailServer.ehlo()
mailServer.starttls()
mailServer.ehlo()
mailServer.login(gmailUser, gmailPass)
mailServer.sendmail(gmailUser, recipient, msg.as_string())
mailServer.quit()
print('Sent email to "%s"' % recipient)
if __name__=='__main__':
while True:
sendMail("Function", "Blah!")
gc.collect()
print hpy().heap()
time.sleep(10)
Я только что видел этот код где-то в Интернете и скопировал его.Это работает, но утечка памяти.Может кто-нибудь помочь мне узнать, где происходит утечка памяти ??: (
РЕДАКТИРОВАТЬ: похоже, что использование msg.as_string () является причиной утечки памяти. Использование простого текста, такого как msg = "Blah" вместо msg.as_string () решает проблему. Ноэто не позволяет мне добавить строку темы.