多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > scrapy_redis只能使用redis的db0?

scrapy_redis只能使用redis的db0?

來源:程序員人生   發布時間:2017-03-01 08:39:14 閱讀次數:3331次

背景:

盡人皆知,Redis默許的配置會生成db0~db15共16個db,切分出16個db的1個作用是方便不同項目使用不同的db,避免的數據混淆,也為了方便數據查看。
Python在連接Redis時如果沒有指定用哪個db則默許使用db0。使用過scrapy_redis模塊的同學也知道去重和種子隊列都在db0上。

現在有1個基于scrapy、Redis的散布式爬蟲,是從同事那邊接手過來的。本來沒覺得scrapy_redis使用db2來寄存request和dupefilter有甚么難度,也就沒在乎他的代碼是怎樣實現的了,只知道他的爬蟲將種子和去重都放在了db2。昨天添加功能改代碼,將代碼從服務器拷貝出來跑測試,發現數據是寄存在db0中的。仔細看了代碼,沒發現哪里改成了db2,但服務器上跑為何會把數據存到db2呢?1樣的代碼,保存的地方居然不1樣?大惑!

半信半疑地去看了1下服務器中scrapy_redis的源碼,發現connection.py中連Redis的代碼居然被改了!
scrapy_redis/connection.py
也是有點醉!直接改python模塊的源代碼是大忌!雖然這樣改簡單快捷,但是模塊是公用的代碼,如果其他項目也要用到這個項目的話就亂了,而且也不利于本項目代碼的遷移,與飲鴆止渴無差。

然后看了scrapy_redis模塊的源碼,發現scrapy_redis在連接Redis時并沒有指定db,默許db0。并沒有接口讓用戶指定db。那末問題來了,scrapy_redis想要使用redis的db2,該怎樣做?



解決:

1、同事那個改法就很簡單快捷(如上方圖片),但是不能直接改模塊源碼,要把源碼復制1份出來,放在項目目錄下,然落后行修改。項目調用scrapy_redis時也是調用本目錄下的scrapy_redis。

2、第2種是用繼承。見上方的圖片,代碼的作用是實例化生成1個redis連接對象,1般情況下是返回redis.Redis()對象。這個方法被scheduler.py下的from_settings()方法調用。代碼以下:
這里寫圖片描述
我們可以繼承這個方法,再來個移花接木。
具體方法:在settings.py同級目錄下新建1個文件schedulerOverwrite.py,填入下面的代碼。然后在settings.py設置SCHEDULER=schedulerOverwrite.SchedulerSon,以后在settings.py中設置REDIS_DB=XXX便可指定db。

import redis
from scrapy_redis.scheduler import Scheduler
from scrapy.utils.misc import load_object

# default values
SCHEDULER_PERSIST = False
QUEUE_KEY = '%(spider)s:requests'
QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
DUPEFILTER_KEY = '%(spider)s:dupefilter'
IDLE_BEFORE_CLOSE = 0

REDIS_URL = None
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0


def from_settings(settings):
    url = settings.get('REDIS_URL', REDIS_URL)
    host = settings.get('REDIS_HOST', REDIS_HOST)
    port = settings.get('REDIS_PORT', REDIS_PORT)
    db = settings.get('REDIS_DB', REDIS_DB)

    # REDIS_URL takes precedence over host/port specification.
    if url:
        return redis.from_url(url)
    else:
        return redis.Redis(host=host, port=port, db=db)


class SchedulerSon(Scheduler):
    @classmethod
    def from_settings(cls, settings):
        persist = settings.get('SCHEDULER_PERSIST', SCHEDULER_PERSIST)
        queue_key = settings.get('SCHEDULER_QUEUE_KEY', QUEUE_KEY)
        queue_cls = load_object(settings.get('SCHEDULER_QUEUE_CLASS', QUEUE_CLASS))
        dupefilter_key = settings.get('DUPEFILTER_KEY', DUPEFILTER_KEY)
        idle_before_close = settings.get('SCHEDULER_IDLE_BEFORE_CLOSE', IDLE_BEFORE_CLOSE)
        server = from_settings(settings)
        return cls(server, persist, queue_key, queue_cls, dupefilter_key, idle_before_close)



轉載請注明出處,謝謝?。ㄔ逆溄樱篽ttp://blog.csdn.net/bone_ace/article/details/54139500)

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲精品国产一区二区三区在 | 国产欧美曰韩一区二区三区 | 中文字幕在线观看 | 黄色aa毛片| xxfree性人妖hd| 亚洲免费一区二区 | 国产在线精品一区二区夜色 | 2022国产成人精彩在线视频 | 国产精品久久久久毛片真精品 | 国产成人资源 | 日本校园春色 | 欧美乱妇高清无乱码亚洲欧美 | 亚洲h视频 | 黑人40厘米全进去xxxx猛交 | 亚洲一区二区三区高清不卡 | 网友偷自拍原创区 | 福利视频第一区 | 亚洲精品自产拍在线观看 | 欧美三级午夜理伦三级小说 | 亚洲视频免费看 | 久久精品三级视频 | 欧美人成人亚洲专区中文字幕 | 18岁免费网站 | 一二三四视频免费观看在线看1 | 亚洲爽爽 | 亚洲一区视频 | 日本一区二区三区四区在线观看 | 国产综合亚洲欧美日韩一区二区 | 欧美视频一区二区三区在线观看 | 永久免费在线观看视频 | 日本一级毛片在线看 | 中文字幕高清 | 国产精品二区高清在线 | 又黄又www | 美女免费观看一区二区三区 | 国产欧美一区二区久久 | 一级做片爱性视频免费 | 国产精品自拍第一页 | 中文字幕第5页 | 曰本老妇bbbbbxxxxx | 亚洲天天做夜夜做天天欢 |