【问题标题】:Changes to a Gmail notification script对 Gmail 通知脚本的更改
【发布时间】:2013-04-28 16:51:33
【问题描述】:

经过长时间的搜索,我发现 this python script 可以满足我的需要,以便在收到新电子邮件时实时通知我的 iOS 应用程序。我通常用 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() 很重要?

包含以上所有内容的主要问题是我需要对此脚本进行哪些更改(如果有),以使其在不停止或超时的情况下运行。

谢谢

【问题讨论】:

    标签: python python-2.7 python-3.x


    【解决方案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()
    

    【讨论】:

    • 感谢您的信息。所以基本上time.sleep(60) 将退出一个在一分钟后不再有用的线程,而另一个线程仍在进行中?
    • 不,time.sleep() 函数只是让线程等待并防止它消耗 cpu 时间。我没有在这里实现最干净的解决方案,它只是一种用最少的改动来修复你的脚本的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2019-11-25
    • 2019-12-08
    • 2022-10-08
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多