Python 多线程超详细到位总结
什么是多线程?
多个线程的并行计算可以更快地完成一定的任务。在Python中,多线程可以在同一时间内执行多个线程。
比如,开发人员可以同时进行多个CPU密集型操作,例如访问网络,完成I/O操作或处理大量数据,而不会导致程序被阻塞。
如何使用 Python 的多线程模块?
Python提供了一个标准的多线程模块——threading,通过它可以轻松地实现多线程编程
1. 创建线程
创建一个多线程,需要使用 threading 模块提供的 Thread 类。下面的示例展示了如何创建一个线程。
import threading
def my_function():
print("Starting Function")
# Add your function code here
print("Finishing Function")
thread = threading.Thread(target=my_function)
2. 激活线程
当创建一个线程的时候,线程并不会自动开始执行。相反,需要使用 start() 函数来开始执行线程。
以下示例演示如何激活线程
import threading
def my_function():
print("Starting Function")
# Add your function code here
print("Finishing Function")
thread = threading.Thread(target=my_function)
thread.start()
3. 等待线程结束
为了确保线程已经完成,可以使用 join() 函数等待线程执行完毕。
以下示例演示如何等待线程完成
import threading
def my_function():
print("Starting Function")
# Add your function code here
print("Finishing Function")
thread = threading.Thread(target=my_function)
thread.start()
thread.join()
4. 示例1:多线程爬取网页数据
多线程可以大大加快爬虫的速度,因此在网络爬虫中通常使用多线程。
以下示例展示了如何创建并使用多线程从Web获取数据的爬虫。
import threading
import requests
class WebDataFetcher(threading.Thread):
def __init__(self, url):
threading.Thread.__init__(self)
self.url = url
def run(self):
response = requests.get(self.url)
print(response.content)
tasks = ["https://www.google.com", "https://www.python.com", "https://www.github.com"]
threads = []
for url in tasks:
t = WebDataFetcher(url)
threads.append(t)
t.start()
for t in threads:
t.join()
5. 示例2:多线程下载文件
多线程下载大文件可以大大提高下载速度。
以下示例展示了如何使用多线程下载文件。
import threading
import requests
class FileDownloader(threading.Thread):
def __init__(self, url, file_name):
threading.Thread.__init__(self)
self.url = url
self.file_name = file_name
def run(self):
response = requests.get(self.url)
with open(self.file_name, "wb") as f:
f.write(response.content)
urls = ["http://speedtest.tele2.net/10MB.zip", "http://speedtest.tele2.net/100MB.zip", "http://speedtest.tele2.net/1000MB.zip"]
file_names = ["10MB.zip", "100MB.zip", "1000MB.zip"]
threads = []
for i in range(len(urls)):
t = FileDownloader(urls[i], file_names[i])
threads.append(t)
t.start()
for t in threads:
t.join()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 多线程超详细到位总结 - Python技术站