python学习-循环线程

原创 2015年07月07日 17:24:02

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

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

    

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





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Chrome学习笔记(一):线程模型,消息循环

原创文章,转载请注明:转载自Soul Apogee 本文链接地址:Chrome学习笔记(一):线程模型,消息循环 看Chrome已经有一段时间了,但是一直都没有沉淀些内容下来,是该写写笔记...

张孝祥并发章节-子线程和主线程往复循环(学习笔记)

要求: 子线程先循环10次,然后主线程循环100次,然后子线程循环10次,接着主线程循环100次......如此往复50次。 代码: package cn.javaious.concurre...

自绘线程进度条不能循环

  • 2017-03-02 11:34
  • 135KB
  • 下载

Python中的多线程threading和线程间消息队列queue学习笔记

python中实现多线程可以通过threading类。线程间同步则可以用queue类。至于python的进程间通信,暂时没有发现有类似linux ipc的模块可供使用,但是可以通过unix域套接字实现...

C++11循环线程

自定义线程消息循环

Python学习笔记(四) 之进程和线程

1.多进程1.1 multiprocessing多进程模块由于Python是跨平台的,自然也应该提供一个跨平台的多进程支持。multiprocessing模块就是跨平台版本的多进程模块。multipr...

python学习——进程vs线程

我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,W...

Python学习笔记(三):进程与线程

一、进程(process) 在Python中,进程的主要模块为subprocess模块,此模块旨在代替老的os.system,os.spawn*,os.popen*,popen2,commands模块...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)