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()

これは完全に機能しましたが、Terminal でアプリケーションを停止したにもかかわらずcontrol–C127.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 に答える