python - scrapy 被 redis 阻塞

标签 python redis scrapy yield

我用一个scrapy spider作为消费者,还有一个生产者生产url,不定期放到redis中,我的代码如下:

def start_requests(self): 
    for msg in self.redis_sub.listen():
        data = json.loads(msg['data'].decode('utf-8'))
        id = data['id']
        styleUrl = data['styleUrl']
        pageCount = data['pageCount']
        self.obi.public(json.dumps({'id': id, 'isSynchronized': 1}))
        yield SplashRequest(url=styleUrl, callback=self.specHome_parse,
                                args={'wait': 5, 'timeout': 60, 'images': 0},
                                meta={'pageCount': pageCount, 'id': id, 'dont_redirect': True})

代码可以正常接收url,但是当它阻塞在第二行等待url时,所有的scrapy都暂停了,包括之前yield的请求。我认为它应该继续运行旧的请求,这是什么原因以及如何解决它?请帮助我

最佳答案

使用Scrapy-Redis而不是重新发明轮子。参见 Feeding a Spider from Redis .

关于python - scrapy 被 redis 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324024/

相关文章:

python - 使用python脚本的docker中的尾栈

python - web2py 有这些吗?

python - Scrapy - 我在哪里可以在 Linux Ubuntu E4.5 上找到它

python - 在有两个模型的表单中保存之前设置ForeignKey

python - 实现 scikit-learn 机器学习算法

windows - Redis 集群就绪客户端

amazon-web-services - 无法启动 Redis 内存数据存储。 Ubuntu 18.04

ruby-on-rails - Heroku 上的 Redis 连接错误

python - 如何访问 scrapy 上传到 S3 的图像名称?

python - Scrapy 如何使用 Loader 忽略带有空白字段的项目