Python中的线程是轻量级的执行单元,一个进程可以包含多个线程 。通过多线程的方式,可以让代码同时执行多项任务 , 从而提高程序的执行效率 。在Python中,通过threading模块可以方便的定义和调用线程 。
文章插图
一、定义线程
线程的定义可以通过两种方式实现 。第一种方式是定义一个Thread类的子类,并重写其run()方法 。具体实现方式如下:
from threading import Thread
import time
class MyThread(Thread):
def run(self):
for i in range(5):
print('线程名:', self.name, '执行时间:', time.ctime(time.time()))
time.sleep(1)
if __name__ == '__main__':
threads = []
for i in range(5):
t = MyThread()
threads.append(t)
for t in threads:
t.start()
t.join()
以上代码首先定义一个MyThread类 , 继承了Thread类,并且重写了run()方法 。在run()方法中,线程要执行的任务可以在此处实现 。接着创建了5个线程,并将这些线程添加到一个列表中 。然后通过循环启动所有的线程,并调用join()方法等待所有线程执行完毕 。
第二种方式是直接创建Thread实例,并传递一个可调用的对象作为参数 。具体实现方式如下:
import threading
import time
def worker(num):
print('线程%s开始执行' % num)
time.sleep(1)
print('线程%s执行结束' % num)
if __name__ == '__main__':
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
for t in threads:
t.start()
t.join()
以上代码首先定义了一个worker函数作为线程的执行任务,并且创建了5个Thread实例 。对于每个Thread实例,可以通过target参数指定这个线程要执行的任务,并通过args参数传递参数给任务函数 。接着通过循环启动所有的线程,并调用join()方法等待所有线程执行完毕 。
二、启动线程
调用start()方法可以启动一个线程 , 并开始执行线程的任务 。例如:
if __name__ == '__main__':
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
for t in threads:
t.start()
上面的代码启动了5个线程 , 并开始执行它们的任务 。
三、等待线程执行完成
在线程执行过程中,若想等待线程执行完毕,可以调用join()方法等待线程执行完成 。例如:
if __name__ == '__main__':
threads = []
for i in range(5):
t = threading.Thread(target=worker, args=(i,))
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
上面的代码先启动了5个线程,并在所有线程都执行完毕后才结束程序的运行 。
四、线程同步
多个线程同时访问共享资源时,可能会造成数据竞争的问题 , 从而导致数据出现异常 。因此,在进行多线程编程时,需要使用线程同步来保证数据的安全性 。Python中提供了多种线程同步的方式,包括锁(Lock)、条件变量(Condition)、信号量(Semaphore)和事件(Event)等 。
摘要:本文介绍了在Python中通过threading模块定义和调用线程的方法,包括线程的定义、启动和等待等,同时还介绍了线程同步的方法,以保证数据的安全性 。
【在Python中通过threading模块定义和调用线程的方法】关键词:Python、线程、threading、线程同步、锁、条件变量、信号量、事件
推荐阅读
- python图形中的根号?
- pr调色调出电影感
- 用python 设置环境变量?
- 油画棒纸用多厚的?
- ae转pr导出
- python实现二分查找算法
- Python 专题六 局部变量、全局变量global、导入模块变量
- django数据模型中null和blank的区别说明
- python打印word文档?
- ps人物边缘发光怎么处理?