我有以下设置(Docker):
- Celery 链接到运行 Scrapy 蜘蛛的 Flask 设置
- 烧瓶设置(显然)
- Flask setup 获取对 Scrapy 的请求 -> 启动 worker 来做一些工作
现在我想更新 celery worker 进度的原始烧瓶设置。但是现在没有办法celery.update_state()
在刮板内部使用,因为它无法访问原始任务(尽管它正在 celery 任务内部运行)。
顺便说一句:我是否缺少有关scrapy结构的信息?我可以在内部分配参数__init__
以便能够进一步使用似乎是合理的,但是scrapy似乎将该方法用作lambda函数。
回答一些问题:
How are you using celery with scrapy?
Scrapy 在 celery 任务中运行,而不是从命令行运行。我也没听说过scrapyd
,这是scrapy的子项目吗?我使用远程工作人员从 celery/flask 实例内部触发 scrapy,因此它与原始请求所实例化的线程不同,它们是单独的 docker 实例。
作品task.update_state
很棒!在 celery 任务中,但是一旦我们“进入”蜘蛛,我们就不再可以访问 celery。有任何想法吗?
从 item_scraped 信号发出 Task.update_state(taskid,meta={})。如果scrapy碰巧在Celery任务本身中运行(因为它默认为self),您也可以在没有taskid的情况下运行
这有点像访问当前 celery 任务的静态方式吗?因为我会喜欢那个......