zoukankan      html  css  js  c++  java
  • 多线程 python threading 简单锁/互斥锁

    测试代码:

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    
    num = 0 
    def run(n):
        print 'this is %s num' % n
        global num 
        time.sleep(1)
        num += 1
    
    
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
    
    
    print num

    结果:

    image

    num 为什么没有添加呢? 主要是主进程没有等待该子进程执行完毕就stop了, 所以要等待所有的子进程执行完毕后再结束主进程

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    p_list = []
    num = 0
    def run(n):
        print 'this is %s num' % n
        global num
        time.sleep(1)
        num += 1
    
    
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
        p_list.append(t)
    
    for p in p_list:
        p.join()
    
    print num

    执行结果:

    image

    啊结果怎么是194 啊,不是200吗,着是原因是在线程操作公共数据时候没有添加锁,导致所有拿取公共数据的时候没有规范

    加锁代码

    #!/usr/bin/python
    # coding:utf8
    import threading
    import time
    
    p_list = []
    num = 0 
    def run(n):
        print 'this is %s num' % n
        global num 
        time.sleep(1)
        lock.acquire()
        num += 1
        lock.release()
    
    
    lock = threading.Lock()
    for i in range(200):
        t = threading.Thread(target=run, args=(i,))
        t.start()
        p_list.append(t)
    
    for p in p_list:
        p.join()
    
    print num

    在看执行结果:

    image  无论你执行多少次都没有问题

  • 相关阅读:
    索引访问中的access和filter
    分页SQL走全表扫描导致TEMP耗尽
    多表关联的分页SQL经典案例
    分页技术COUNT STOPKEY和SORT ORDER BY
    FILTER再来一例
    错误的选择了HASH JOIN!
    dojo加载树报错
    dojo中获取表格中某一行的某个值
    dojo处理删除操作报错
    分页语句优化
  • 原文地址:https://www.cnblogs.com/zhaogaolong/p/5533956.html
Copyright © 2011-2022 走看看