美文网首页
Python 多线程 threading

Python 多线程 threading

作者: Benny_浩 | 来源:发表于2017-11-21 20:37 被阅读41次

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

相关文章

  • 线程

    多线程--threading python的thread模块是比较底层的模块,python的threading模块...

  • 06.系统编程-2.线程

    1、多线程-threading python的thread模块是比较底层的模块,python的threading模...

  • 1.6.1 Python线程使用 -- threading

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是...

  • 线程实战

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是...

  • 线程 threading

    1. 多线程-threading python的thread模块是比较底层的模块,python的threading...

  • python多线程

    1.通过threading模块使用多线程 python中多线程的方式是引用threading模块 2.Thread...

  • Python Threading.Timer 多线程无法退出

    Python Threading.Timer 多线程无法退出

  • 多线程

    threading 模块 在 Python 中实现多线程,可以利用 threading 模块中的 Thread 来...

  • Python中线程的理解

    Num01-->多线程threading Python中建议使用threading模块,而不要使用thread模块...

  • Python多线程

    threading与Lock# Python中实现多线程的方式有Thread和threading,其中Thread...

网友评论

      本文标题:Python 多线程 threading

      本文链接:https://www.haomeiwen.com/subject/ppspvxtx.html