2017-01-09 101 views
-1

我寫了一個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) 
+0

請提供一個[MCVE](http://stackoverflow.com/help/mcve)來演示您的問題 –

+0

爲了防止downvoting,您應該瞭解[如何提出一個好問題](http:// stackoverflow .COM /幫助/如何對問)。 –

+0

謝謝你,我已經提出了改變建議。 – dperrie

回答

-1

您可以從threading.Thread直接繼承和覆蓋其run方法:

class SomeTask(threading.Thread): 
    def run(self): 
     # Will be executed in separate thread 

通過其start方法啓動線程。請致電queues

+0

謝謝,我會放棄並回復你!幸運的是,我不希望線程之間有任何交流。 – dperrie