Python3使用线程

Python2标准库中提供了两个模块thread和threading支持多线程。
thread有一些缺陷在Python3中弃用,为了兼容性,python3 将 thread 重命名为 “_thread”,在Python3中推荐直接使用threading。

创建线程对象

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

参数说明:

group 应该为 None;为了日后扩展 ThreadGroup 类实现而保留。
target 是用于 run() 方法调用的可调用对象。默认是 None,表示不需要调用任何方法。
name 是线程名称。默认情况下,由 "Thread-N" 格式构成一个唯一的名称,其中 N 是小的十进制数。
args 是用于调用目标函数的参数元组。默认是 ()。
kwargs 是用于调用目标函数的关键字参数字典。默认是 {}。
如果 daemon 不是 None,线程将被显式的设置为 守护模式,不管该线程是否是守护模式。如果是 None (默认值),线程将继承当前线程的守护模式属性。

线程对象其中的几个方法

start()开始线程活动。
run() 代表线程活动的方法。
join(timeout=None) 等待,直到线程终结

使用线程有两种方式:函数或者用类来包装线程对象

例子1:使用函数

import random
import threading 
import time

def run(threadName):
    for i in range(5):
        time.sleep(random.random())
        #这里只是演示参数,获取当前线程名可用threading.currentThread().getName()
        print('{} : {}'.format(threadName, i))

t1 = threading.Thread(target=run, args=('thread 1',))
t1.start()
t2 = threading.Thread(target=run, args=('thread 2',))
t2.start()

例子2:使用类

import random
import threading 
import time

class test(threading.Thread):
    def __init__(self,name):
        super().__init__()
        self.name = name
    def run(self):
        for i in range(5):
            time.sleep(random.random())
            print('{} : {}'.format(self.name, i))
        
t1 = test('thread 1')
t1.start()
t2 = test('thread 2')
t2.start()

例子1和例子2某次运行结果:

thread 1 : 0
thread 1 : 1
thread 2 : 0
thread 1 : 2
thread 2 : 1
thread 2 : 2
thread 1 : 3
thread 2 : 3
thread 2 : 4
thread 1 : 4

例子3:

import random
import threading 
import time

def run(threadName,):
    print('{} start'.format(threadName))
    time.sleep(random.random())
    print('{} end'.format(threadName))

threads = []

#创建10个线程对象
for i in range(10):
    threads.append(threading.Thread(target=run,args=('thread ' + str(i),)))

#运行线程
for th in threads:
    th.start()

#等待,直到线程终结。
for th in threads:
    th.join()

print("finished")

某次运行结果:

thread 0 start
thread 1 start
thread 2 start
thread 3 start
thread 4 start
thread 5 start
thread 6 start
thread 7 start
thread 8 start
thread 9 start
thread 2 end
thread 3 end
thread 9 end
thread 0 end
thread 1 end
thread 8 end
thread 6 end
thread 4 end
thread 7 end
thread 5 end
finished

 

    原文作者:gdjlc
    原文地址: https://www.cnblogs.com/gdjlc/p/11425406.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞