Выполнение функции запуска Threading.Thread объекта независимо от основного - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть класс, который наследует многопоточность. Thread, и я включил многопоточность. Thread. init (self) в мой метод init и переопределил метод run. Однако когда я запускаю поток с помощью myObject.start (), основной l oop не зависит от этого и скорее ждет. Обратите внимание, я нигде не использую join ().

Желаемое поведение состоит в том, что после запуска потока с помощью myObject.start () поток продолжает выполняться, в то время как основная функция продолжает выполняться. В следующем примере после выполнения myObject.start () я бы хотите, чтобы "МОЙ ДРУГОЙ КОД" запускался немедленно, независимо от того, что делает мой поток.

myObject = Object (arg1, arg2)

myObject.start ()

MY ДРУГОЙ КОД

МОЙ ДРУГОЙ КОД

Спасибо

РЕДАКТИРОВАТЬ Часть класса Gmail:

def gmailAPIEmailQueue(self, labelList):
    try: 
        searchResult = self.gmailAPIMessageLabelSearch(labelList)
        if searchResult is False: 
            logging.error("Failed to search for emails with labelList (" +str(labelList)+ ")")
            return False
        for targetID in searchResult: 
            targetEmailID = targetID['id'] 
            emailMessage = self.gmailAPIGetFullMessage(targetEmailID)
            if emailMessage is False:
                logging.error("Unable to get email associated with the emailID (" +str(targetID)+ ")")
                continue
            emailContent = self.gmailAPIExtractEmailContent(emailMessage)
            if emailContent is False:
                logging.error("Failed to get email content associated with emailID (" +str(targetID)+ ")")
                continue
            attachments = self.gmailAPIDownloadAttachments(targetEmailID)
            if attachments is False:
                logging.error("Failed to download email attachments associated with emailID (" +str(targetID)+ ")")
                continue
            theEmail = Email(attachments, emailMessage, emailContent)
            (self.emailQueue).append(theEmail)
        return True
    except:
        logging.error("An error was encountered in Gmail Email Queue")
        tb = traceback.format_exc()
        logging.exception(tb)
        return False

def run(self):
    while True: 
        self.gmailAPIEmailQueue(self.labelList)

def __init__(self, email, password, labelList=['INBOX', 'UNREAD'],port=993, server='imap.gmail.com'):
    threading.Thread.__init__(self)
    socket.setdefaulttimeout(60)
    self.serverConnection = None
    self.email = email
    self.password = password
    self.port = port
    self.server = server
    self.gmailAPIService = None
    self.emailQueue = list()
    self.labelList = labelList
    result = self.gmailAPIInitialize()
    if result is False:
        logging.error("Gmail API Failed to Initialize")
        sys.exit(-1)

В моей главной программе :

myGmail = Gmail(emailAddress, emailPassword, searchLabel)
myGmail.start()

theEmailQueue = myGmail.gmailAPIGetQueue()
#OTHER CODE, Such as other threads.
#
#
#emailProcessor = EmailProcessing(var1,var2)
#emailProcess.start()

Я хочу, чтобы myGmail и emailProcessor запускались одновременно, но на данный момент он ожидает myGmail.start ().

...