zoukankan      html  css  js  c++  java
  • python标准库介绍——31 threading 模块详解

    threading 模块
    
    
    (可选) ``threading`` 模块为线程提供了一个高级接口, 如 [Example 3-1 #eg-3-1] 所示. 
    它源自 Java 的线程实现. 和低级的 ``thread`` 模块相同, 只有你在编译解释器时打开了线程支持才可以使用它 .
    
    你只需要继承 //Thread// 类, 定义好 ``run`` 方法, 就可以创建一 个新的线程. 
    使用时首先创建该类的一个或多个实例, 然后调用 ``start`` 方法. 这样每个实例的 
    ``run`` 方法都会运行在它自的线程里.
     
    ====Example 3-1. 使用 threading 模块====[eg-3-1]
    
    ```
    File: threading-example-1.py
    
    import threading
    import time, random
    
    class Counter:
        def _ _init_ _(self):
            self.lock = threading.Lock()
            self.value = 0
    
        def increment(self):
            self.lock.acquire() # critical section
            self.value = value = self.value + 1
            self.lock.release()
            return value
    
    counter = Counter()
    
    class Worker(threading.Thread):
    
        def run(self):
            for i in range(10):
                # pretend we're doing something that takes 10?00 ms
                value = counter.increment() # increment global counter
                time.sleep(random.randint(10, 100) / 1000.0)
                print self.getName(), "-- task", i, "finished", value
    
    #
    # try it
    
    for i in range(10):
        Worker().start() # start a worker
    
    *B*Thread-1 -- task 0 finished 1
    Thread-3 -- task 0 finished 3
    Thread-7 -- task 0 finished 8
    Thread-1 -- task 1 finished 7
    Thread-4 -- task 0 Thread-5 -- task 0 finished 4
    finished 5
    Thread-8 -- task 0 Thread-6 -- task 0 finished 9
    finished 6
    ...
    Thread-6 -- task 9 finished 98
    Thread-4 -- task 9 finished 99
    Thread-9 -- task 9 finished 100*b*
    ```
    
    [Example 3-1 #eg-3-1] 使用了 //Lock// 对象来在全局 //Counter// 对象里创建临界区 
    (critical section). 如果删除了 ``acquire`` 和 ``release`` 语句, 那么 ``Counter`` 很可能不会到达 100.
    

      

  • 相关阅读:
    解决 git 同步时 Everything up-to-date
    vs2019 git Authentication failed for xxx
    vs2015发布项目到虚拟主机组策略阻止csc.exe程序问题
    vs2017 使用 reportviewer
    var,dynamic的用法
    水晶报表报无法在资源中找到报表,请重新创建项目 错误
    css隐藏元素的方法
    css-浮动与清除浮动的原理详解(清除浮动的原理你知道吗)
    正则并不适合严格查找子串
    浏览器加载、渲染过程总结
  • 原文地址:https://www.cnblogs.com/xuchunlin/p/7784761.html
Copyright © 2011-2022 走看看