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输出分别保存,就能说明问题。

  • 相关阅读:
    javaoop初级入门继承和封装和接口和多态和抽象类
    java基础的几种 函数
    sql server 2008子查询的学习小纪(一)
    中文价码filter
    $http.jsonp和$scope.watch
    普通版选项卡
    面向对象版选项卡
    angular版选项卡
    微信H5--手机键盘弹起导致页面变形
    controller控制器
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/4830895.html
Copyright © 2011-2022 走看看