多线程的运用

    技术2022-07-11  79

    多线程的运用

    首先确定你要调用的库 import threading import time 接着因为是刚学,所以我打算用两个子线程对同一个参数进行加减法运算,所以我本着自上而下的的思路决定先定义主程序,也不想定义类,所以我把构造线程的一些列操作放在了主函数中,主要放的是对加法减法所用到的子线程的定义,让加减法线程开始工作的的方法,还有加减法线程的等待。 if __name__ = '__main__': thread_add = threading.Thread(target = app) thread_sub = threading.Thread(target = sub) thread_add.start() thread_sub.start() thread_add.join() thread_sub.join() 接着我们开始定义加减法方法,在之前我们先把锁放下,已经n的初始值 lock= threading.Lock() n = 0 def add(): global n for _ in range(500000): with lock: n += 1 def sub(): global n for _ in range(500000): with lock: n -= 1

    其中关于用with语句上锁的优点是with语句有点:出异常也会release。当然也可以用try example

    lock.acquire() try: n += 1 finally: lock.release()

    或是直接用

    for _ in range(500000): lock.acquire()#上锁 n += 1 lock.release()#解锁

    完整的代码如下

    import threading import time lock = threading.Lock() n = 0 def add(): global n for _ in range(500000): # lock.acquire()#上锁 with lock: #with语句有点:出异常也会release n += 1 # lock.release()#解锁 # lock.acquire() # try: # n += 1 # finally: # lock.release() def sub(): global n for _ in range(400000): # lock.acquire() with lock: n -= 1 # lock.release() if __name__ == '__main__': #main thread thread_add = threading.Thread(target=add)#创造线程 thread_sub = threading.Thread(target=sub) # 创造线程 thread_add.start()#先调用谁,n先所在把哪个方法里 thread_sub.start()#执行线程 thread_add.join() # join start之后就可以进行了 join本身会等在那等待加法进行完成 thread_sub.join() # join的作用:等待子线程完成后执行主线程,使打印结果合理 print('n = ', n,flush = True)

    结果呢如下

    Processed: 0.014, SQL: 9