Python:连续运行脚本的一部分



我编写了一个python脚本,该脚本空闲等待gmail推送一个指示已收到电子邮件的通知。然后解析内容并搜索数据库,然后通过电子邮件将数据库数据发送回原始发件人。

目前,一旦收到电子邮件,脚本就无法处理另一封电子邮件,直到脚本通过电子邮件返回。我想知道是否有一种方法可以让脚本不断地收听电子邮件。此时,如果在类似的时间收到两封电子邮件,则不会处理第二封。

我认为多线程可能是一个解决方案,但我不确定。可能为下面代码的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)

您可以直接从threading.Thread继承并覆盖其run方法:

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

通过其start方法启动线程。

线程之间的通信应该通过队列来处理。

相关内容

最新更新