您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页Python 多线程 threading

Python 多线程 threading

来源:伴沃教育

threading要优于thread。
因为Python存在GIL(全局解释器锁),防止多个线程同时被执行,所以当我们程序是IO密集型才使用多线程,如果是计算密集型需要使用多进程提高效率。

import threading
print(threading.active_count())  #显示运行线程数 --2
print(threading.enumerate()) #显示运行的线程明细 --[<_MainThread(MainThread, started 8636)>, <Thread(SockThread, started daemon 8644)>]
print(threading.current_thread()) #显示当前执行的线程 --<_MainThread(MainThread, started 8636)>

def thread_job():
    print('This is an added Thread, number is %s'% threading.current_thread()) #定义一个函数

added_thread = threading.Thread(target=thread_job) #绑定一个线程
added_thread.start() --This is an added Thread, number is <Thread(Thread-1, started 11440)> #启动

因为threading会遇到执行顺序的问题,此时需要增加join():

added_thread = threading.Thread(target=thread_job,name='T1',args=(1,) #可定义一个别名,args用于传参
added_thread.join() #确保执行完added_thread()才执行下面的print
print('all done\n')

如果遇上两个函数共用一个全局变量时,此时需要增加lock():

import threading

def job1():
    global A,lock
    lock.acquire()
    for i in range(10):
        A += 1
        print('job1',A)
    lock.release()

def job2():
    global A,lock
    lock.acquire()
    for i in range(10):
        A += 10
        print('job2',A)
    lock.release()
if __name__ == '__main__':
    lock = threading.Lock()
    A = 0
    t1 = threading.Thread(target=job1)
    t2 = threading.Thread(target=job2)
    t1.start()
    t2.start()
    t1.join()
    t2.join()

输出结果为:

image.png

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务