我寫了一個python腳本,它閒着等待gmail推送一個通知,指出已收到一封電子郵件。然後解析內容並搜索數據庫,然後將數據庫數據通過電子郵件發送回原始發件人。Python:連續運行一段腳本
當前收到一封電子郵件後,該腳本無法處理另一封電子郵件,直到腳本通過電子郵件發回。我想知道腳本是否有辦法不斷收聽電子郵件。就目前而言,如果在相似時間收到兩封電子郵件,則不會處理第二封電子郵件。
我認爲多線程可能是一個解決方案,但我不確定。可能爲以下代碼的processEmail.py部分創建一個新線程?
對不起,如果我解釋得很糟糕,我正在努力解釋這一點,請隨時索取更多信息。
編輯:而不是向下投票我可以幫我通過評論告訴我我應該包括更多的信息?
編輯2:這裏是一個代碼示例,我想得還是聽一個電子郵件的功能,而電子郵件是processEmail.py
正在處理import imaplib2
import time
import subprocess
from threading import *
from subprocess import call
import processEmail
class Idler(object):
def __init__(self, conn):
self.thread = Thread(target=self.idle)
self.M = conn
self.event = Event()
def start(self):
self.thread.start()
def stop(self):
self.event.set()
def join(self):
self.thread.join()
def idle(self):
while True:
if self.event.isSet():
return
self.needsync = False
def callback(args):
if not self.event.isSet():
self.needsync = True
self.event.set()
self.M.idle(callback=callback)
self.event.wait()
if self.needsync:
self.event.clear()
self.dosync()
def dosync(self):
print "An email has been received, please wait...\n"
self.execute()
def execute(self):
processEmail.main()
M = imaplib2.IMAP4_SSL("imap.gmail.com")
M.login("email_address","email_pass")
M.select("Folder")
idler = Idler(M)
idler.start()
x = False
while not x: time.sleep(0.1)
請提供一個[MCVE](http://stackoverflow.com/help/mcve)來演示您的問題 –
爲了防止downvoting,您應該瞭解[如何提出一個好問題](http:// stackoverflow .COM /幫助/如何對問)。 –
謝謝你,我已經提出了改變建議。 – dperrie