python中通过多线程解决多任务
# 多线程执行多任务 import threading import time def Sing(): for i in range(5): print('唱歌-----%d' % i) time.sleep(1) def Dance(): for i in range(5): print('跳舞-------%d' % i) time.sleep(1) if __name__ == '__main__': s = threading.Thread(target=Sing) d = threading.Thread(target=Dance) # 开启线程 s.start() d.start()
结果为:

多线程共享全局变量
# 多线程共享全局变量 import threading import time num = 100 def test1(): global num for i in range(100000): num += 1 print('test1-----', num) def test2(): global num for i in range(100000): num += 1 print('test2---', num) if __name__ == '__main__': t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) t1.start() t2.start() while len(threading.enumerate()) != 1: time.sleep(1) print("2个线程对同一个全局变量操作之后的最终结果是:%s" % num)
结果为:

结论
如果多个线程共享一个全局变量,则会造成资源竞争的情况,从而数据会不正确
互斥锁
互斥锁能够很好的解决资源竞争的问题
# 多线程共享全局变量 import threading import time num = 0 def test1(): global num for i in range(1000000): mutex.acquire() # 上锁 num += 1 mutex.release() # 解锁 print('test1-----', num) def test2(): global num for i in range(1000000): mutex.acquire() # 上锁 num += 1 mutex.release() # 解锁 print('test2---', num) if __name__ == '__main__': # 创建一个互斥锁 # 默认是未上锁的状态 mutex = threading.Lock() t1 = threading.Thread(target=test1) t2 = threading.Thread(target=test2) t1.start() t2.start() while len(threading.enumerate()) != 1: time.sleep(1) print("2个线程对同一个全局变量操作之后的最终结果是:%s" % num)
结果为:


浙公网安备 33010602011771号