zoukankan      html  css  js  c++  java
  • Python多线程编程之多线程加锁

    Python语言本身是支持多线程的,不像PHP语言。

    下面的例子是多个线程做同一批任务,任务总是有task_num个,每次线程做一个任务(print),做完后继续取任务,直到所有任务完成为止。

     1 #coding:utf-8
     2 import threading
     3 
     4 start_task = 0
     5 task_num = 10000
     6 mu = threading.Lock()   ###通过工厂方法获取一个新的锁对象
     7 
     8 class MyThread(threading.Thread):   ###类MyThread继承基类threading.Thread
     9 
    10     def run(self):  ##线程启动的入口函数,子类需重写
    11         global start_task
    12         global mu
    13         global start_task
    14 
    15         while start_task < task_num:    ##如果任务没有完成,则继续
    16             if mu.acquire():    ##加锁
    17                 if start_task < task_num:
    18                     print start_task
    19                     start_task = start_task + 1
    20                 mu.release()    ##释放锁
    21 
    22 def test():
    23     thread_all = []
    24     for i in range(6):  ##for循环创建6个线程
    25         t = MyThread()  ##创建线程
    26         thread_all.append(t)
    27         t.start()   ###启动线程
    28 
    29     for i in range(6):
    30         thread_all[i].join()    ##等待线程结束
    31 
    32 if __name__ == "__main__":
    33     test()

    测试加锁与不加锁效果:将任务数设置为1千万或者以上,在多核机器上将print输出分别保存,就能说明问题。

  • 相关阅读:
    C# json字符串格式
    JS网页换肤
    JS 播放列表收缩展开
    js学习系列之-----apply和call
    JS下拉图片Demo3
    算法---001
    inline-block 左边固定,右边自适应
    css3动画特效:上下晃动的div
    通过js写一个消息弹框
    css3 操作动画要点
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/4830895.html
Copyright © 2011-2022 走看看