我设置了一个每分钟都要调用的函数来发送电子邮件。我使用以下方法每分钟调用一次:
import smtplib
def messages_emailed():
fromaddr = FROMADDRESS
toaddrs = TOADDRESS
msg = "this is a test message."
username = USER
password = PASSWORD
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg)
server.quit()
threading.Timer(60, messages_emailed).start() #runs func every min
messages_emailed()
虽然我使用control–C
在终端中停止了应用程序,但是我仍在使用127.0.0.1:5000
继续接收邮件,并在浏览器中刷新运行我的应用程序的页面{{1} },继续显示我的应用程序。我可以编辑我的脚本来添加一个取消语句,但点击保存没有做任何更改,并尝试在终端重新加载我的应用程序返回错误
> * Running on ``http://127.0.0.1:5000/ ``Traceback (most recent call
> last): File "bit.py", line 79, in <module>
> app.run() File "/Library/Python/2.7/site-packages/Flask-0.9-py2.7.egg/flask/app.py",
> line 739, in run
> run_simple(host, port, self, **options) File "/Library/Python/2.7/site-packages/Werkzeug-0.8.3-py2.7.egg/werkzeug/serving.py",
> line 613, in run_simple
> test_socket.bind((hostname, port)) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py",
> line 224, in meth socket.error: [Errno 48] Address already in use
目前,我通过删除用于发送邮件的邮件帐户来阻止电子邮件的涌入。但是,我想知道长期解决方案是什么样的,我可以理想地从终端停止或在程序执行时停止执行。研究建议使用sys.exit(0)
虽然我不知道我的程序在哪里放置它或何时它将退出该功能。
非常感谢任何帮助。
答案 0 :(得分:2)
首先你必须检查格式。
如果你想使用线程,你必须编写线程管理器,它将为你的线程封装start()
,stop()
方法。
thread1 = threading.Timer(60, sender()).start()
停止只需致电thread1.stop()
答案 1 :(得分:1)
您的脚本似乎已启动新流程以定期重新运行电子邮件发送功能。您可以通过运行ps aux | grep python
来检查有效流程。