一、生产者与消费者
生产者与消费者是多线程中很常见的问题:
生产者—>>>产生数据的模块;
消费者—>>>处理数据的模块;
缓冲区—>>>生产者产生的数据和消费者处理的数据都存放在缓冲区。
生产者------>缓冲区------>消费者
1. 爬虫图片示例
生产者:产生待爬取的url;
缓冲区:将获取的url进行存储;
消费者:对生产者获取到的url从缓冲区拿出来,然后发起请求。
单线程:【通用爬虫】拿到一张图片的url就进行下载;
**多线程:【异步爬虫】同时从缓冲区得到多张图片的url,一次下载多张图片。**
生产者:爬取图片url------>缓冲区:存放url------>消费者:获取url得到响应
2. Python代码实现
import threading
import random
urls = 100
lock = threading.Lock()
#定义生产者模块
class Producer(threading.Thread):
def run(self):
global urls
while True: #缓冲区
url = random.randint