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

  • 相关阅读:
    PAT:1006(换个格式输出整数想&#183;)
    PAT 1008(数组循环右移问题)
    kaliLinux 工具dmitry参数解析
    PAT 1004(成绩排名)(C++)
    PAT乙级:我要通过(1003)
    PAT乙级:写出这个数(1002)
    PAT乙级:(3n+1)猜想 (1001)
    Linux初体验
    C语言基础入门:起源
    Linux_ pipe 匿名管道 浅解
  • 原文地址:https://www.cnblogs.com/xudong-bupt/p/4830895.html
Copyright © 2011-2022 走看看