Python的多线程

Posted Sch01aR#

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的多线程相关的知识,希望对你有一定的参考价值。

线程间的关系

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import threading
import time

def MyThread(n):
    print("Running Thread",n)
    print(threading.current_thread()) #打印当前线程的类型
    time.sleep(2)

for i in range(20):
    t = threading.Thread(target=MyThread,args=(i,))
    t.start()

print("Running Main Threading",threading.current_thread())
print(threading.active_count()) #计算线程数

 运行结果

主线程和子线程同时执行,然后脚本执行Mythread函数里的time.sleep(2),运行停顿大概2秒

线程数为当前主线程和子线程数之和

 

def MyThread(n):
    print("Running Thread",n)
    print(threading.current_thread())
    time.sleep(2)

for i in range(20):
    t = threading.Thread(target=MyThread,args=(i,))
    t.start()

 这段代码为主线程启动的子线程

 

print("Running Main Threading",threading.current_thread())
print(threading.active_count())

 这段代码为主线程执行的线程

多线程的等待

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import threading
import time

All_Thread = []

def MyThread(n):
    print("Running %s Thread"%n)
    time.sleep(2)

for i in range(20):
    t = threading.Thread(target=MyThread,args=(i,))
    t.start()

print("Finished All Sub-thread")

 运行,查看结果

该脚本同时执行主线程和子线程

如果想先执行完子线程再执行主线程,可以使用join()

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import threading
import time

All_Thread = []

def MyThread(n):
    print("Running %s Thread"%n)
    time.sleep(2)

for i in range(20):
    t = threading.Thread(target=MyThread,args=(i,))
    t.start()
    All_Thread.append(t)

for t in All_Thread:
    t.join()

print("Finished All Sub-thread")

 运行,查看结果

先执行了子线程,然后停留了大概2秒,再执行了主线程

线程号

# -*- coding:utf-8 -*-
__author__ = "MuT6 Sch01aR"

import threading

def MyThread():
    print(threading.get_ident())

for i in range(10):
    t = threading.Thread(target=MyThread)
    t.start()

 运行结果

打印出了这10个子线程的id号

以上是关于Python的多线程的主要内容,如果未能解决你的问题,请参考以下文章

为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快。

python的多线程多进程代码示例

如何理解python的多线程编程

python中的多线程为啥会报错?

PySide 中的多线程提升 Python C++ 代码

Python的多线程GIL浅谈