[PYTHON]SCRAPY學習筆記(二)使用REDIS構建隊列

爲了構建分佈式爬蟲,使用高效的REDIS數據庫構建隊列,

統一採用先進先出模式。

因爲內存數據庫是臨時保存的(關機或重啓數據就會釋放),且不能將分配的內存佔滿,佔滿後無法進行操作,因此應該適當根據分配的內存控制隊列長度。

import redis
from .model import PageProjectList, Session


class Queue(object):
    def __init__(self, queue_type):
        '''
        :param queue_type: 指定隊列的種類,
        目前主要有project_json,building_json,room_json,roomid四種,
        消息隊列統一採用先進先出的模式進行管理
        '''

        self.type = queue_type

        self.conn_pool = redis.ConnectionPool(host='10.73.9.21',
                                              port='6379',
                                              password='',
                                              decode_responses=True,
                                              db='1')

        self.re_pool = redis.Redis(connection_pool=self.conn_pool)
        # 構建連接池

    def fidPut(self, value):
        '''
        :param roomid_value: 待放入redis隊列的roomid值
        :return: 放入redis隊列
        '''
        self.re_pool.rpush(self.type, value)

    def fidGetStr(self):
        value = self.re_pool.blpop(self.type)[1]
        print("取出的roomid值爲" + value)
        return value

    def qsize_int(self):
        '''
        :return: 返回隊列的大小,整型
        '''
        return self.re_pool.llen(self.type)


if __name__ == '__main__':
    q = Queue("page_list")
    while q.qsize_int() < 500:
        r = Session.query(PageProjectList).filter(PageProjectList.STATE == 0).first()
        q.fidPut(r.FID)
        r.STATE = 8
        Session.commit()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章