关闭

[置顶] python学习-循环线程

标签: Python线程循环继承
287人阅读 评论(0) 收藏 举报
分类:

近期需要用到线程去执行一个单独的循环任务,必要的时候可以关闭这个任务。在线程中运行关闭没有找到理想的方法,于是自己通过继承线程实现了,感觉比较方便。

先说下正常的使用,方便进行对比。

    

import threading
def task():
    while True:
        print "hello"
        sleep(1)

t = threading.thread(target = func)
t.start()
t.join()
这里会发现任务一直被挂起无法退出任务和结束线程,那么通过状态控制while的执行是基本的方法

我使用最直接分方法把状态控制与线程捆绑在一起,只要执行join函数就可以退出任务关闭线程,让使用者没有感觉差异性。

class LoopThread(threading.Thread):
    def __init__(self, group=None, target=None, name=None,
                args=(), kwargs=None, verbose=None):
        super(LoopThread,self).__init__()
        
        self.excute = False
        self.__target = target
        self.__args = args
        if kwargs is None:
            kwargs = {}
        self.__kwargs = kwargs
        
    def run(self):
        try:
            if self.__target:
                while self.excute:
                    self.__target(*self.__args, **self.__kwargs)
        finally:
            # Avoid a refcycle if the thread is running a function with
            # an argument that has a member that points to the thread.
            del self.__target, self.__args, self.__kwargs
                
    def loopstart(self,state = True):
        self.excute = state
        self.start()
       
    def loopjoin(self,timeout=None):
        self.excute = False
        self.join(timeout)  
这里主要的重载了run方法,提供了新的start和join,使用方法与正常的线程一致

import threading
def task():
    while True:
        print "hello"
        sleep(1)

t = LoopThread(target = task)
t.loopstart(True)#参量控制是否循环执行
sleep(10)
t.loopjoin()

这里就循环执行10秒后任务与线程正常退出





0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3770次
    • 积分:96
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类