在 Celery 任务中使用 Scrapy 解析函数(有时可能需要 10 分钟)时,我得到了这个。
我使用: - Django==1.6.5 - django-celery==3.1.16 - celery==3.1.16 - psycopg2==2.5.5 (我也使用 psycopg2==2.5.4)
[2015-07-19 11:27:49,488: CRITICAL/MainProcess] Task myapp.parse_items[63fc40eb-c0d6-46f4-a64e-acce8301d29a] 内部错误: InterfaceError('connection already closed',)
追溯(最近一次通话):
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/celery/app/trace.py”,第 284 行,在 trace_task 中
uuid, retval, 成功, request=task_request,
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/celery/backends/base.py”,第 248 行,在 store_result
请求=请求,**kwargs)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/djcelery/backends/database.py”,第 29 行,在 _store_result 中
traceback=traceback, children=self.current_task_children(请求),
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/djcelery/managers.py”,第 42 行,在 _inner
返回乐趣(*args,**kwargs)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/djcelery/managers.py”,第 181 行,在 store_result
'元':{'孩子':孩子}})
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/djcelery/managers.py”,第 87 行,在 update_or_create
返回 get_queryset(self).update_or_create(**kwargs)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/djcelery/managers.py”,第 70 行,在 update_or_create
obj, 已创建 = self.get_or_create(**kwargs)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/query.py”,第 376 行,在 get_or_create
返回 self.get(**lookup), False
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/query.py”,第 304 行,在 get
num = len(克隆)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/query.py”,第 77 行,在 __len__
self._fetch_all()
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/query.py”,第 857 行,在 _fetch_all
self._result_cache = list(self.iterator())
迭代器中的文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/query.py”,第 220 行
对于 compiler.results_iter() 中的行:
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py”,第 713 行,在 results_iter
对于 self.execute_sql(MULTI) 中的行:
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py”,第 785 行,在 execute_sql
游标 = self.connection.cursor()
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/backends/__init__.py”,第 160 行,光标
cursor = self.make_debug_cursor(self._cursor())
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/backends/__init__.py”,第 134 行,在 _cursor
返回 self.create_cursor()
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/utils.py”,第 99 行,在 __exit__
六.reraise(dj_exc_type, dj_exc_value, traceback)
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/backends/__init__.py”,第 134 行,在 _cursor
返回 self.create_cursor()
文件“/home/mo/Work/python/pb-env/local/lib/python2.7/site-packages/django/db/backends/postgresql_psycopg2/base.py”,第 137 行,在 create_cursor
游标 = self.connection.cursor()
InterfaceError:连接已经关闭
原文由 mou55 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑:
找到了更好的解决方案。我像这样实现了一个 celery 任务基类:
我相信它也会解决你的问题。