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("完成交工")

这样就相对完美了

 

posted on 2019-03-19 22:21  沈家大大  阅读(72)  评论(0编辑  收藏  举报