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("完成交工")
这样就相对完美了
浙公网安备 33010602011771号