Python爬虫编程思想(141):多线程和多进程爬虫--生产者-消费者问题与queue模块

Posted 蒙娜丽宁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫编程思想(141):多线程和多进程爬虫--生产者-消费者问题与queue模块相关的知识,希望对你有一定的参考价值。

        本文使用线程锁以及队列来模拟一个典型的案例:生成者-消费者模型。在这个场景下,商品或服务的生产者生成商品,然后将其放到类似队列的数据结构中,生产商品的时间是不确定的,同样消费者消费生产者生产的商品的时间也是不确定的。

        这里使用queue模块来提供线程间通讯的机制,也就是说,生产者和消费者共享一个队列。生产者生成商品后,会将商品添加到队列中。消费者消费商品,会从队列中取一个商品。由于向队列中添加商品和从队列中获取商品都不是原子操作,所以需要使用线程锁将这两个操作锁住。

        下面的例子使用线程锁和队列实现了一个生产者-消费者模型的程序。通过for循环产生若干个生产者和消费者,并向队列中添加商品,以及从队列中获取商品。

from random import randrange
from time import sleep,time, ctime
from threading import Lock, Thread
from queue import Queue
# 创建线程锁对象
lock = Lock()
# 从Thread派生的子类
class MyThread(Thread):
    def __init__(self, func, args):
        super().__init__(target = func, args = args)
# 向

以上是关于Python爬虫编程思想(141):多线程和多进程爬虫--生产者-消费者问题与queue模块的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程

Python爬虫编程思想(135):多线程和多进程爬虫--Python与线程

Python爬虫编程思想(142):多线程和多进程爬虫--多进程

Python爬虫编程思想(142):多线程和多进程爬虫--多进程

Python爬虫编程思想(134):多线程和多进程爬虫--线程与进程详解

Python爬虫编程思想(134):多线程和多进程爬虫--线程与进程详解