您的位置:首页 > 编程语言 > Python开发

python学习-循环线程

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

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

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秒后任务与线程正常退出



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: