【发布时间】:2013-05-20 21:11:17
【问题描述】:
我正在使用 Django Celery 任务通过使用 Gevent 的请求库连接到 Facebook Graph API。我经常遇到的问题是,我时不时地遇到违反协议异常的 EOF。我四处搜索,各种来源提供了不同的修复,但似乎没有一个有效。
我也尝试过猴子修补 ssl 模块 (gevent.monkey.patch_all()) 和其他一些模块,但没有运气。
我什至不确定这是否是 openssl 问题,因为某些消息来源可能会建议,因为在应用 Gevent 优化之前我没有遇到它
Connection error: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
Traceback (most recent call last):
File "/home/user/workspace/startup/project/events/tasks.py", line 52, in _process_page
data = requests.get(current_url)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/sessions.py", line 354, in request
resp = self.send(prep, **send_kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/sessions.py", line 460, in send
r = adapter.send(request, **kwargs)
File "/home/user/workspace/startup/env/local/lib/python2.7/site-packages/requests/adapters.py", line 250, in send
raise SSLError(e)
SSLError: [Errno 8] _ssl.c:504: EOF occurred in violation of protocol
我使用的是最新的 1.0rc Gevent 版本。
尽管 URL 正确,但不时出现的另一个问题是: 连接被“错误(2,'没有这样的文件或目录')'中断后重试(仍然有 5 次尝试):/ID/events?limit=5000&fields=description,name,location,start_time,end_time&access_token =代币
【问题讨论】:
-
我也会尝试这个修复。我唯一担心的是,当使用 Gevent Pool size=1 运行任务时,我根本没有收到任何错误,但是当我尝试运行更多(2 到 10)个错误时,错误变得更常见(网络无法访问,EOF ssl 错误,没有这样的文件或目录)。所以对我来说,它似乎是 gevent 问题?
-
我不知道
gevent/requests兼容性的当前状态。你试过grequests吗? -
TLSv1 强制修复似乎可以解决问题,不再有 SSL 错误。但是......启用此修复后,我不断收到错误 OperationalError:在大约 7k 次写入数据库后无法打开数据库文件(使用 sqllite3)。这很奇怪,因为如果 celery 无法访问 db 而不是在 7k 成功交易之后,这个错误应该从一开始就发生......
-
奇怪的是,我在使用手机的 wifi/网络共享和 FTPS 时收到此错误,但在使用相同代码和标准 wifi 时却没有。
标签: python django celery python-requests gevent