简体   繁体   English

Python-线程处理-同时执行

[英]Python - Threading - execute simultaneously

I have this example code: 我有以下示例代码:

# some imports that I'm not including in the question

class daemon:
    def start(self):
        # do something, I'm not including what this script does to not write useless code to the question
        self.run()

    def run(self):
        """You should override this method when you subclass Daemon.

        It will be called after the process has been daemonized by 
        start() or restart().
        """

class MyDaemon(daemon):
    def run(self):
        while True:
            time.sleep(1)

if __name__ == "__main__":
    daemonz = MyDaemon('/tmp/daemon-example.pid')
    daemonz.start()

def firstfunction():
    # do something
    secondfunction()

def secondfunction():
    # do something
    thirdfunction()

def thirdfunction():
    # do something

# here are some variables set that I am not writing
firstfunction()

How can I exit from the run(self) function of class "daemon" and going on executing the firstfunction() like written in the last line? 如何从类“ daemon”的run(self)函数退出并继续执行最后一行中编写的firstfunction()? I'm a newbie with Python, and I'm trying to learn 我是Python的新手,我正在尝试学习

# EDIT I managed to implement the daemon class into the treading class. #EDIT我设法将守护程序类实现为踩踏类。 But I'm in the same situation of first, the script stays in daemon class and doesn't execute the other lines. 但首先我处于相同的情况,脚本保留在daemon类中,不执行其他行。

class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def daemonize(self):
    # istructions to daemonize my script process

    def run(self):
        self.daemonize()


def my_function():
    print("MyFunction executed") # never executed

thread = MyThread()
thread.start()
my_function() # the process is successfully damonized but
              # this function is never executed

You may use the break keyword to exit loops, and continue to the next line. 您可以使用break关键字退出循环,然后继续下一行。 return can be used to exit functions. return可以用来退出函数。

class daemon:
    def start(self):
        self.run()

    def run(self):
        while True:
            break
        return
        print()  # This never executes

If you want MyDaemon to run alongside the rest of your code, you have to make it a process or thread. 如果希望MyDaemon与其余代码一起运行,则必须使其成为进程或线程。 Code then automatically continues to the next line, while the MyDaemon class (thread/process) runs. 然后,代码将自动继续到下一行,同时运行MyDaemon类(线程/进程)。

import threading  


class MyThread(threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        print("Thread started")
        while True:
            pass


def my_function():
    print("MyFunction executed")

thread = MyThread()
thread.start()        # executes run(self)
my_function()

This code produces the following result: 此代码产生以下结果:

Thread started
MyFunction executed

To make thread a daemon, you can use thread.setDaemon(True) . 要使thread成为守护程序,可以使用thread.setDaemon(True) That function must be called before the thread is started: 必须在启动线程之前调用该函数:

thread = MyThread()
thread.setDaemon(True)
thread.start()
my_function()

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

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