一、前言
场景1:一个网络爬虫,顺序爬取一个网页花了一个小时,采用并发下载就减少到了20分钟。
场景2:一个应用软件优化前每次打开网页需要3秒,采用异步并发提升到了200毫秒。
假设一个工程的工作量为100,不采用并发编程就相当于由一个人去完成这个工作量为100的所有工作内容,可能需要1个小时来做完。
但是还是这工作量为100的工程,我们采用并发编程就相当于是由2个人或者3个人去共同完成这份100工作量的工作,可能这份工作只需要半个小时就能做完。
总之引入并发就相当于提升程序进行速度。
二、Python多线程的使用
1.Python创建简单多线程的方法
import threading
import time
# 定义两个线程要执行的函数
def print_hello():
for _ in range(10):
print("Hello")
time.sleep(0.1) # 添加微小的延迟以确保线程交替
def print_world():
for _ in range(10):
print("World")
time.sleep(0.1) # 添加微小的延迟以确保线程交替
# 创建线程对象
thread_hello = threading.Thread(target=print_hello)
thread_world = threading.Thread(target=print_world)
# 启动线程
thread_hello.start()
thread_world.start()
# 等待线程执行完毕
thread_hello.join()
thread_world.join()
总结:
- 准备一个函数。
- 使用 import threading 创建一个线程对象 t 。
- 使用 t.start() 来启动线程。
- 使用 t.join() 来等待线程的结束。
2 改写爬虫程序,变成多线程爬取博客网
import threading
import time
import requests
urls = [f"https://www.cnblogs.com/#p{page}" for page in range(1, 50+1)]
def craw(url):
r = requests.get(url)
print(url, len(r.text))
craw(urls[0])
# 运行结果是:
# https://www.cnblogs.com/#p1 72285
# 可以看到爬取了第一页内容的长度是72285个,这是我们的爬虫函数。
单线程
def single_thread():
"""
单线程函数
:return:
"""
print("single_thread begin")
for url in urls:
craw(url)
print("single_thread end")
多线程函数
def multi_thread():
"""
多进程函数
:return:
"""
print("multi_thread begin")
threads = []
for url in urls:
threads.append(threading.Thread(target=craw, args=(url,)))
for thread in threads:
thread.start()
for thread in threads:
thread.join()
print("multi_thread end")
单线程和多线程的速度对比
if __name__ == '__main__':
start = time.time()
single_thread()
end = time.time()
print(f"单线程需要时间{end-start}seconds")
start = time.time()
multi_thread()
end = time.time()
print(f"多线程需要时间{end - start}seconds")
标签:thread,Python,爬取,start,网为例,线程,url,time,print
From: https://blog.csdn.net/qq_69220879/article/details/143865386