Python多线程编程入门详解
什么是多线程编程?
多线程编程是指利用计算机CPU多核心,同时执行多个线程完成任务的编程方式。在Python中,多线程编程可以提高程序的运行效率,使得程序可以同时执行多个任务。
Python多线程编程的基本概念
在Python中,使用threading
库可以进行多线程编程。在进行多线程编程时,需要注意以下概念:
- 线程:是程序执行的最小单元,一个线程可以独立的执行一段代码。
- 主线程:是程序的入口,也称为主线程,所有的子线程都是由主线程创建。
- 子线程:是主线程创建出来的线程,可以独立执行一段代码。
- 同步:多个线程之间的协调,保证线程间数据的正确性和一致性。
- 互斥:一段代码被一个线程占用时,其它线程就不能再访问这段代码。
Python多线程编程的基本步骤
Python多线程编程的基本步骤如下:
- 导入
threading
模块 - 创建线程
- 开启线程
- 等待线程完成
下面我们将会详细讲解每一步。
导入threading
模块
首先要导入threading
模块:
import threading
创建线程
创建线程需要使用threading.Thread
类,一个线程可以通过执行一个函数来创建:
def func():
print('Thread is running...')
t = threading.Thread(target=func)
在这个例子中,我们定义了一个函数func
,目的是让这个函数在新的线程中执行。使用threading.Thread
类,并将target
参数指向这个函数,就可以创建一个新的线程t
。
开启线程
创建好线程之后,需要使用start()
方法来启动线程:
t.start()
线程将会在启动后执行target
参数所指向的函数。
等待线程完成
如果想要等待线程完成之后再执行后面的代码,可以使用join()
方法:
t.join()
print("Thread is finished")
在这个例子中,主线程将不会进行到这一步,直到子线程执行完成后,才会执行print("Thread is finished")
语句。
Python多线程编程的示例
示例一:计算1~10000000的和
import threading
class SumThread(threading.Thread):
def __init__(self, start, end):
threading.Thread.__init__(self)
self.start = start
self.end = end
self.result = 0
def run(self):
for i in range(self.start, self.end):
self.result += i
t1 = SumThread(1, 5000000)
t2 = SumThread(5000001, 10000001)
t1.start()
t2.start()
t1.join()
t2.join()
print(t1.result + t2.result)
在这个例子中,我们创建了两个SumThread
线程,分别计算1~5000000和5000001~10000000两个数列的和,在两个线程执行完成之后将每个线程的结果相加即可得到1~10000000的总和。
示例二:多线程下载图片
import requests
import threading
def download_image(url, name):
response = requests.get(url)
with open(name, 'wb') as f:
f.write(response.content)
urls = [
'https://www.example.com/image1.jpg',
'https://www.example.com/image2.jpg',
'https://www.example.com/image3.jpg',
'https://www.example.com/image4.jpg',
'https://www.example.com/image5.jpg'
]
for i in range(len(urls)):
t = threading.Thread(target=download_image, args=(urls[i], f'image{i+1}.jpg'))
t.start()
在这个例子中,我们从如上所示的URL列表下载五个图片,我们使用for
循环来创建五个线程,每个线程分别下载一张图片,由于线程之间是并行的,因此可以更快的下载图片。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python多线程编程入门详解 - Python技术站