0

我设置了一个函数,该函数旨在每分钟调用一次以发送电子邮件。我使用以下命令每分钟调用一次:

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继续显示我的应用程序。我可以编辑我的脚本来添加一个取消语句,但是点击保存没有做任何更改,并且尝试在终端中重新加载我的应用程序返回了一个错误

>  * 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)尽管我不知道在我的程序中将其放置在何处或何时退出该功能。

任何帮助将不胜感激。

4

2 回答 2

2

首先,您必须检查格式。

如果你想使用线程,你必须编写你的线程管理器,它将封装你的线程start()stop()方法。

thread1 = threading.Timer(60, sender()).start()

停止只是打电话thread1.stop()

于 2012-11-03T15:51:00.667 回答
1

您的脚本似乎已经启动了一个新进程来定期重新运行电子邮件发送功能。您可以通过运行来检查活动进程ps aux | grep python

于 2012-11-03T15:48:44.600 回答