繁体   English   中英

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

[英]Python: Continuously running a section of a script

我编写了一个 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方法启动线程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM