繁体   English   中英

Python-线程处理-同时执行

[英]Python - Threading - execute simultaneously

我有以下示例代码:

# 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()

如何从类“ daemon”的run(self)函数退出并继续执行最后一行中编写的firstfunction()? 我是Python的新手,我正在尝试学习

#EDIT我设法将守护程序类实现为踩踏类。 但首先我处于相同的情况,脚本保留在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

您可以使用break关键字退出循环,然后继续下一行。 return可以用来退出函数。

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

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

如果希望MyDaemon与其余代码一起运行,则必须使其成为进程或线程。 然后,代码将自动继续到下一行,同时运行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()

此代码产生以下结果:

Thread started
MyFunction executed

要使thread成为守护程序,可以使用thread.setDaemon(True) 必须在启动线程之前调用该函数:

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

暂无
暂无

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

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