精华内容
下载资源
问答
  • python 线程 暂停, 恢复, 退出 我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦...
  • Python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 对于函数中...

    Python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 对于函数中没有循环,可以使用join()来结束循环。
    其中方法之一:一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. threading中Event对象能实现此功能。

    • 对于event.isSet()可以查看event的状态,
    • set()函数返回为True,
    • clear()函数返回为False。
    • self.__flag.wait() 中self.__flag为True时立即返回, 为False时阻塞直到self.__flag为True后返回
      另一个方法是使用信号量。
        def wait(self, timeout=None):
            """Block until the internal flag is true.
            If the internal flag is true on entry, return immediately. Otherwise,
            block until another thread calls set() to set the flag to true, or until
            the optional timeout occurs.
    		阻塞, 直到内部的标志位为True时. 如果在内部的标志位在进入时为True时, 立即返回. 否则, 阻塞直到其他线程调用set()方法将标准位设为True, 或者到达了可选的timeout时间.
            When the timeout argument is present and not None, it should be a
            floating point number specifying a timeout for the operation in seconds
            (or fractions thereof).
    		当给定了timeout参数且不为None, 它应该是一个浮点数,以秒为单位指定操作的超时(或是分数)。
    		此方法在退出时返回内部标志,因此除非给定了超时且操作超时,否则它将始终返回True。
            This method returns the internal flag on exit, so it will always return
            True except if a timeout is given and the operation times out.
            """
            ......
    

    利用wait的阻塞机制, 就能够实现暂停和恢复了, 再配合循环判断标识位, 就能实现退出了, 下面是代码示例:

    #!/usr/bin/python
    # coding: utf-8
    
    import threading
    import time
    
    class Job(threading.Thread):
    
      def __init__(self, *args, **kwargs):
        super(Job, self).__init__(*args, **kwargs)
        # 用于暂停线程的标识
        self.__flag = threading.Event()   
        self.__flag.set()    # 设置为True
        # 用于停止线程的标识
        self.__running = threading.Event()   
        self.__running.set()   # 将running设置为True
    
      def run(self):
        while self.__running.isSet():
          self.__flag.wait()   # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回
          print time.time()
          time.sleep(1)
    
      def pause(self):
        self.__flag.clear()   # 设置为False, 让线程阻塞
    
      def resume(self):
        self.__flag.set()  # 设置为True, 让线程停止阻塞
    
      def stop(self):
        self.__flag.set()    # 将线程从暂停状态恢复, 如果已经暂停的话
        self.__running.clear()    # 设置为False  
    
    展开全文
  • python线程重启方法

    2020-12-26 06:48:14
    python线程程序运行中,会出现由于异常而导致某线程停止的情况,为了保证程序的稳定运行,需要自动重启down掉的线程. python Threading类有一个setName()的方法,可以为线程设置名字。 threading.enumerate()可以...
  • 模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 对于函数中没有循环,可以使用join()来结束循环。 方法一...

    对通过threading模块创建新python的thread模块是比较底层的模块,python的threading模块是对thread做了一些封装,可以更加方便的被使用。
         模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 对于函数中没有循环,可以使用join()来结束循环。
    方法一:一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了.  直到我看到threading中Event对象。对于event.isSet()可以查看event的状态,set()函数返回为True,clear()函数返回为False。
    self.__flag.wait()  中self.__flag为True时立即返回, 为False时阻塞直到self.__flag为True后返回

        #!/usr/bin/env python
        # coding: utf-8
         
        import threading
        import time
         
         
        class Job(threading.Thread):
         
            def __init__(self, *args, **kwargs):
                super(Job, self).__init__(*args, **kwargs)
                self.__flag = threading.Event()     # 用于暂停线程的标识
                self.__flag.set()       # 设置为True
                self.__running = threading.Event()      # 用于停止线程的标识
                self.__running.set()      # 将running设置为True
         
            def run(self):
                while self.__running.isSet():
                    self.__flag.wait()      # 为True时立即返回, 为False时阻塞直到self.__flag为True后返回
                    print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                    time.sleep(1)
         
            def pause(self):
                self.__flag.clear()     # 设置为False, 让线程阻塞
         
            def resume(self):
                self.__flag.set()    # 设置为True, 让线程停止阻塞
         
            def stop(self):
                self.__flag.set()       # 将线程从暂停状态恢复, 如何已经暂停的话
                self.__running.clear()        # 设置为False
         
         
        a = Job()
        a.start()
        time.sleep(3)
        a.pause()
        time.sleep(3)
        a.resume()
        # time.sleep(2)
        # a.stop()

    方法二:1.信号量
            也提供acquire方法和release方法,每当调用acquire方法的时候,如果内部计数器大于0,则将其减1,如果内部计数器等于0,则会阻塞该线程,知道有线程调用了release方法将内部计数器更新到大于1位置。class threading.Sempaphore(value = 1) --限制资源的并发访问。semaphore 是一个内部的计数器,它会随着acquire()的请求减小,也会随着release()的
    释放增加。这个计数器的值不会小于零,当acquier() 发现计数器的值为0时,那么当前
    对象会等待直到其他对象release()为止。acquier(blocking = True ,timeout = None)
    release()

     

    对于Thread方法的基本使用
    class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
    这个构造函数通常会用一些关键字参数,下面就了解下这些关键字:
         group :这个变量作为保留变量,是为了以后扩展用的,暂时可以不用考虑。
         target: 是通过run()方法调用的可调用对象。默认为无,这意味着什么都不做。
         name:线程的名字。默认情况下,一个唯一的名称是”thread-n”,的形式,其中n是一个小的十进制数。
         args:元组参数,为target所调用的。
         kwargs:关键字参数的字典,为target所调用的。
         daemon: 设置daemon是否daemon 如果没有显示设置,daemon的属性时从当前线程继承。
    ————————————————
    版权声明:本文为CSDN博主「猥琐发育」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_33540705/article/details/90232209

    展开全文
  • 参考别人的:... 重写Thread线程类参考官方文档:https://docs.python.org/zh-cn/3/library/threading.html#module-threading 我自己写的代码: """ 功能:封装一个自定...

    参考别人的:https://blog.csdn.net/u013040887/article/details/80878561

    重写Thread线程类参考官方文档:https://docs.python.org/zh-cn/3/library/threading.html#module-threading

     

     

     

     

    我自己写的代码:

    """
        功能:封装一个自定义的线程管理类【兼容线程的启动和停止】
             重写Thread线程类参考官方文档:https://docs.python.org/zh-cn/3/library/threading.html#module-threading
    """
    
    from threading import Thread, Event
    import time
    from app.libs.utils.util_global import UtilGlobal
    
    
    class OwnThread(Thread):
        def __init__(self, target, name=None, group=None,
                     args=(), kwargs=None, daemon=None):
            Thread.__init__(self, group=group, target=target, name=name,
                            args=args, kwargs=kwargs, daemon=daemon)
            self.target = target
            self.args = args
            self.kwargs = UtilGlobal.check_none_type_to_empty_dict_else_original(kwargs)
            self.__running = Event()
            self.__running.set()
    
        def run(self):
            """
                功能:重写父类的run方法【当外部调用own_thread.start()开启线程就会自动运行run方法】
                特殊说明:父类run方法的三个属性【_target、_args、_kwargs】都是私有属性【下划线开头】,无法继承!
                        所以这里不能直接super().run(),而是直接调用target方法即可
            """
            while self.__running.isSet():
                UtilGlobal.check_is_function_or_method_type(self.target)
                self.target(*self.args, **self.kwargs)
                time.sleep(1)
    
        def stop(self):
            """
                功能:封装一个停止线程的方法
            :return:
            """
            self.__running.clear()
    
    
    def test():
        print("执行线程中...")
    
    
    a = OwnThread(target=test, name="test")
    
    a.start()
    
    time.sleep(5)
    a.stop()
    

     

    展开全文
  • 在使用python时,经常会暂停(不是停止)运行程序查看结果,网上的方法比较多,但都会用到专用的库,因此比较麻烦且繁琐。考虑到使用python经常会用到opencv库,所以可以使用opencv库中的相关函数进行实现。 使用到...
  • 由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python线程是真正的Posix Thread,而不是模拟出来的线程Python的标准库提供了两个模块:thread和...

    由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。

    Python的标准库提供了两个模块:threadthreadingthread是低级模块,threading是高级模块,对thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。

    启动一个线程就是把一个函数传入并创建Thread实例,然后调用start()开始执行:

    import time, threading
    
    # 新线程执行的代码:
    def loop():
        print 'thread %s is running...' % threading.current_thread().name
        n = 0
        while n < 5:
            n = n + 1
            print 'thread %s >>> %s' % (threading.current_thread().name, n)
            time.sleep(1)
        print 'thread %s ended.' % threading.current_thread().name
    
    print 'thread %s is running...' % threading.current_thread().name
    t = threading.Thread(target=loop, name='LoopThread')
    t.start()
    t.join()
    print 'thread %s ended.' % threading.current_thread().name

    python-线程的暂停, 恢复, 退出


    我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. 但暂停和恢复线程就有点难了, 我一直也不清除有什么好的方法, 直到我看到threading中Event对象的wait方法的描述时.


    #!/usr/bin/env python
    # coding: utf-8
    
    import threading
    import time
    
    
    class Job(threading.Thread):
    
        def __init__(self, *args, **kwargs):
            super(Job, self).__init__(*args, **kwargs)
            self.__flag = threading.Event()     # 用于暂停线程的标识
            self.__flag.set()       # 设置为True
            self.__running = threading.Event()      # 用于停止线程的标识
            self.__running.set()      # 将running设置为True
    
        def run(self):
            while self.__running.isSet():
                self.__flag.wait()      # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回
                print time.time()
                time.sleep(1)
    
        def pause(self):
            self.__flag.clear()     # 设置为False, 让线程阻塞
    
        def resume(self):
            self.__flag.set()    # 设置为True, 让线程停止阻塞
    
        def stop(self):
            self.__flag.set()       # 将线程从暂停状态恢复, 如何已经暂停的话
            self.__running.clear()        # 设置为False    

    展开全文
  • 标识为fail 时,测试脚本进程暂停运行,直至标识为ok。 网络连接出问题的时候,线程1发送状态给线程2 。 我在线程1里设置了随机故障。 线程2 只有打印语句。 pub.subscribe 可以理解为注册一个接收消息的方法 pub....
  • Python线程指南

    2021-02-25 07:57:43
    线程有5种状态,状态转换的过程如下图所示:多线程的优势在于可以同时运行多个任务(至少感觉起来是这样)。但是当线程需要共享数据时,可能存在...如果已经有别的线程比如"print"获得锁定了,那么就让线程"set"暂停
  • 我们可以自己实现python线程控制. 一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. 但暂停和恢复线程就有点难了, 我一直也不清除有什么好的方法, 直到我看到...
  • python线程创建线程Python threading allows you to have different parts of your program run concurrently and can simplify your design. If you’ve got some experience in Python and want to speed up your ...
  • Python线程详解

    2020-11-10 10:24:21
    Python线程
  • Python提供了Event对象用于线程间通信,它是由线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号接触。 Event对象实现了简单的线程通信机制,它提供了设置信号,清除信号,等待等用于实现线程间的通信...
  • Python线程线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件...
  • Python线程 Thread(一):如何构造新的线程 Python线程 Thread(二):Thread 类的几种方法 Python 的 Threading 类本身没有暂停,停止的控制方法,要实现这些功能的话可以在run方法中添加一系列的 标志...
  • python线程(中途停止while循环)

    千次阅读 2020-12-10 21:32:35
    https://www.cnblogs.com/ssyfj/p/9017383.html python---基础知识回顾(十)进程和线程(多线程) https://blog.csdn.net/weixin_39662955/article/details/110041464 python遇到死循环怎么跳出来 遇到的问题:...
  • Python 线程同步 线程优先级

    千次阅读 2017-08-01 11:52:34
    线程同步 如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。 使用Thread对象的Lock和Rlock可以实现简单的线程同步,这两个对象都有acquire方法和release...
  • Python3 tkinter中使用event.wait()让多线程暂停总是报错,求大神 小白在使用tkinter编写GUI时,希望可以通过 暂停按钮 让线程暂停,使用 继续按钮 让线程继续执行。百度通过threading.Event()可以让线程暂停,但...
  • 一、线程同步 如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。 使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步,这两个对象都有 acquire ...
  • 比如我的主线程是持续执行的,同时有一个thread1和thread2分别监听两个不同的信号 ...当thread1接受到信号时执行对应程序,但同时暂停主线程的执行 一旦thread1程序结束,主线程继续运行,两个子线程也继续监听?
  • 假设进程下有两个线程 那么这两个线程会继续运行 要使进程挂起 可以考虑使用psutil import psutil p = psutil.Process(pid) p.suspend() #挂起进程 p.resume() #恢复进程 为了证明效果 我写了一个简单的进程Process...
  • 怎样在点击界面的按钮暂停 或 停止 来控制线程暂停或停止 我写的代码如下,请大神们指导下添加什么方法来控制线程 ``` # -*- coding: utf-8 -*- # Form implementation generated from reading ui ...
  • 文章目录一、线程同步二、线程优先级队列 一、线程同步 如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步 使用 Thread 对象的 Lock 和 Rlock 可以实现简单...
  • Python线程编程

    千次阅读 多人点赞 2019-02-28 11:46:07
    在多线程(multithreaded, MT)编程出现之前,计算机程序的执行是由单个步骤序列组成的,该序列在主机的 CPU 中按照同步顺序执行。无论是任务本身需要按照步骤顺序执行,还是整个程序实际上包含多个子任务,都需要...
  • Python2:线程挂起和线程阻塞

    千次阅读 2019-08-29 17:11:31
    Python2:线程挂起和线程阻塞 本文参考博客什么是线程阻塞?为什么会出现线程阻塞?、线程和进程/阻塞和挂起。 (1)线程挂起: ①线程挂起简介: 线程挂起操作实际上就是线程进入非可执行状态下,在这个状态下...
  • python3 线程的停止

    万次阅读 2018-12-18 11:06:57
    设置子线程为守护线程,(setdaemon=True),当主线程结束时,守护线程会自动结束 import threading def run(x): while x: print(x) t = threading.Thread(target=run,args=(4,), daemon=True) #t.setdaemon...
  • Python之多线程应用

    千次阅读 2019-01-02 16:25:22
    进程和线程介绍 进程是并发程序执行过程中资源分配的基本单元,简单点说就是操作系统运行的一个任务。 线程是程序运行与调度的基本单元,简单点说就是进程的一个顺序执行流。...Python中使用线程 函数式创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,683
精华内容 6,673
关键字:

python线程暂停

python 订阅