threading 多线程操作
import threading, time # 导入两个模块 threading time #定义两个程序 def A(): time.sleep(1) print("我是A程序") def B(): time.sleep(2) print("我是B程序") if __name__ == "__main__": thread_A = threading.Thread(target=A) thread_B = threading.Thread(target=B) thread_A.start() thread_B.start() print("完成交工")
会出现的问题是,打印结果是
完成交工 我是A程序 我是B程序
不是我们想要的结果,这是要用到join,完成后的代码是
import threading,time def A(): time.sleep(1) print("我是A程序") def B(): time.sleep(2) print("我是B程序") if __name__ == "__main__": thread_A = threading.Thread(target=A) thread_B = threading.Thread(target=B) thread_A.start() thread_B.start() thread_A.join() thread_B.join() print("完成交工")
打印结果是
我是A程序
我是B程序
完成交工
如果的代码有延迟,就又会产生问题,比如A程序睡眠时间长,导致B程序先执行。多线程是不规律执行的。比如
import threading,time def A(): time.sleep(5) print("我是A程序") def B(): time.sleep(2) print("我是B程序") if __name__ == "__main__": thread_A = threading.Thread(target=A) thread_B = threading.Thread(target=B) thread_A.start() thread_B.start() thread_A.join() thread_B.join() print("完成交工")
这样就会出现先执行完B,所以就可以用lock锁来限制
import threading,time def A(): lock.acquire()#获取 time.sleep(5) print("我是A程序") lock.release()#释放 def B(): lock.acquire()#获取 time.sleep(2) print("我是B程序") lock.release()#释放 if __name__ == "__main__": lock = threading.Lock()#定义全局变量 thread_A = threading.Thread(target=A) thread_B = threading.Thread(target=B) thread_A.start() thread_B.start() thread_A.join() thread_B.join() print("完成交工")
这样就相对完美了