测试代码:
#!/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
结果:
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
执行结果:
啊结果怎么是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
在看执行结果: