# 使用 -thread 创建多线程 import _thread from time import sleep from datetime import datetime def aa(name, tt): for i in range(3): sleep(tt) dd = datetime.now().strftime(‘%Y-%m-%d %H-%M-%S‘) print(f‘{name}, {dd}\n‘) _thread.start_new_thread(aa, (‘t1‘, 2)) _thread.start_new_thread(aa, (‘t2‘, 4)) ‘‘‘结果 t1, 2020-06-02 17-07-35 t2, 2020-06-02 17-07-37 t1, 2020-06-02 17-07-37 t1, 2020-06-02 17-07-39 t2, 2020-06-02 17-07-41 t2, 2020-06-02 17-07-45 ‘‘‘
# 使用 threading 创建多线程 import threading from time import sleep from datetime import datetime def aa(name, tt): for i in range(3): sleep(tt) dd = datetime.now().strftime(‘%Y-%m-%d %H-%M-%S‘) print(f‘{name}, {dd}\n‘) t1 = threading.Thread(target=aa, args=(‘a1‘, 2)) t2 = threading.Thread(target=aa, args=(‘a2‘, 4)) t1.start() t2.start() t1.join() t2.join() ‘‘‘结果 a1, 2020-06-02 17-17-50 a2, 2020-06-02 17-17-52 a1, 2020-06-02 17-17-52 a1, 2020-06-02 17-17-54 a2, 2020-06-02 17-17-56 a2, 2020-06-02 17-18-00 ‘‘‘
在多线程中,如果对同一个变量进行修改,会改变变量的值,这个时候我们就需要锁了
用法:
lock = threading.Lock() # 创建锁 lock.acquire() # 锁定 lock.release() # 解锁
# 在没有使用锁的时候 import threading num = 100 def cq(n:int): global num num += n num -= n def run1(n:int): for i in range(100000): cq(n) t1 = threading.Thread(target=run1, args=(2,)) t2 = threading.Thread(target=run1, args=(4,)) t1.start() t2.start() t1.join() t2.join() print(num) ‘‘‘结果 102 ‘‘‘
# 使用锁后 import threading num = 100 lock = threading.Lock() def cq(n:int): global num num += n num -= n def run(n:int): for i in range(100000): # 上锁 lock.acquire() try: cq(n) finally: # 释放锁 lock.release() t1 = threading.Thread(target=run, args=(2,)) t2 = threading.Thread(target=run, args=(4,)) t1.start() t2.start() t1.join() t2.join() print(num) ‘‘‘结果 100 ‘‘‘
原文:https://www.cnblogs.com/shiyixirui/p/13032430.html