Python:连续运行一段纸条

2024-03-29 11:30:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当前,一旦收到电子邮件,脚本将无法处理另一封电子邮件,直到脚本通过电子邮件发回。我想知道是否有一种方法可以让脚本不断地监听电子邮件。在这个时间点上,如果两封电子邮件在相同的时间收到,第二封将不会被处理。你知道吗

我认为多线程可能是一个解决方案,但我不确定。可能会为处理电子邮件.py下面的代码部分?你知道吗

对不起,如果我解释得不好,我正在努力解释这个充分,请随时要求更多的信息。你知道吗

编辑:你能不能帮我评论一下,告诉我应该包括哪些更多的信息?你知道吗

编辑2:这里是一个代码示例,我正在尝试有能力仍然听电子邮件,而电子邮件正在处理中处理电子邮件.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)

Tags: importself脚本event数据库if电子邮件email
1条回答
网友
1楼 · 发布于 2024-03-29 11:30:55

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

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

通过start方法启动线程。你知道吗

线程之间的通信应该通过queues处理。你知道吗

相关问题 更多 >