间歇性" getrandom()初始化失败"使用scrapy蜘蛛

时间:2018-02-17 17:01:31

标签: python openssl scrapy twisted supervisord

我建造了一只scrapy蜘蛛(scrapy 1.4)。这个蜘蛛是从django网站通过django-rq和supervisord按需触发的。

这是监听django-rq事件的监督工作(reddit用作经纪人)

[program:rq_worker] 
command=python3 manage.py rqworker default 
directory=/var/www/django-app 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/rq_worker.err.log 
stdout_logfile=/var/log/rq_worker.out.log

这个设置运行正常。 但是,有时(我无法按需重现问题),所有蜘蛛都会抛出相同的OpenSSL错误:

2018-02-11 11:02:19 [scrapy.core.scraper] ERROR: Error downloading <GET https://whateverwebsite.com>
Traceback (most recent call last):
  File "/usr/local/lib/python3.5/dist-packages/twisted/internet/defer.py", line 1299, in _inlineCallbacks
    result = result.throwExceptionIntoGenerator(g)
  File "/usr/local/lib/python3.5/dist-packages/twisted/python/failure.py", line 393, in throwExceptionIntoGenerator
    return g.throw(self.type, self.value, self.tb)
  File "/usr/local/lib/python3.5/dist-packages/scrapy/core/downloader/middleware.py", line 43, in process_request
    defer.returnValue((yield download_func(request=request,spider=spider)))
twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('', 'osrandom_rand_bytes', 'getrandom() initialization failed.')]>]

重新启动supervisord会使问题消失。

为了确保我的网站及其蜘蛛正常运行,我必须每次重新启动supervisord时测试没有问题。没什么大不了的,但还是......

我想了解那里出了什么问题? 我该如何解决这个问题?是监督相关吗?扭曲相关? openSSL相关吗?

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

我有类似的错误,但使用python-requests库:

Error([('', 'osrandom_rand_bytes', 'getrandom() initialization failed.')],)

这是由随机数生成器导致的,无法及时收集足够的熵。我已安装rng-tools并解决了问题。