0

長い検索の後、新しい電子メールが到着したときにiOSアプリにリアルタイム通知を受け取るために必要なことを行うこのpythonスクリプトを見つけました。私は通常、Objective-c で書いていますが、これを扱うのはこれが初めてですPython。スクリプトをセットアップして実行する前に、もう少し理解を深めたいと思います。

これは私がよくわからない部分です:

# Because this is just an example, exit after 8 hours
time.sleep(8*60*60)

#finally:
# Clean up.
idler.stop()
idler.join()
M.close()
# This is important!
M.logout()

私の質問:

  1. time.sleep(8*60*60)接続を常にアクティブにしたい場合は、コメントアウトする必要がありますか?

  2. クリーンアップ セクションの用途は何ですか? 接続を維持したい場合に必要ですか?

  3. なぜM.logout()重要なのですか?

上記のすべてを含む主な質問は、このスクリプトを停止またはタイムアウトせずに機能させるために、このスクリプトにどのような変更を加える必要があるか (ある場合) です。

ありがとう

4

1 に答える 1

1

スクリプトは別のスレッドを開始しました。実際の作業はこの別のスレッドで行われます。なんらかの理由でメイン スレッドは何もすることがなく放置されているため、作成者は time.sleep(8*60*60) をしばらくの間占有するようにしました。

接続を常にアクティブに保ちたい場合は、try:/のコメントを外す必要がありますfinally:。以下を参照してください。

Python を初めて使用する場合は、コードのブロックを定義するためにインデントが使用されることに注意してください。プログラムを停止する予定がない場合、クリーンアップ部分は実際には役に立たないかもしれませんが、try:/finally:を使用すると、Ctrl+C でプログラムを停止してもクリーンアップ コードが実行されます。

未検証:

# Had to do this stuff in a try-finally, since some testing 
# went a little wrong.....
try:
    # Set the following two lines to your creds and server
    M = imaplib2.IMAP4_SSL("imap.gmail.com")
    M.login(USER, PASSWORD)
    # We need to get out of the AUTH state, so we just select 
    # the INBOX.
    M.select("INBOX")
    numUnseen = getUnseen()
    sendPushNotification(numUnseen)

    #print M.status("INBOX", '(UNSEEN)')
    # Start the Idler thread
    idler = Idler(M)
    idler.start()

    # Sleep forever, one minute at a time
    while True:
        time.sleep(60)

finally:
    # Clean up.
    idler.stop()
    idler.join()
    M.close()
    # This is important!
    M.logout()
于 2013-04-28T19:28:01.377 に答える