【发布时间】:2017-06-12 11:48:25
【问题描述】:
我有以下设置(Docker):
- Celery 链接到运行 Scrapy 蜘蛛的 Flask 设置
- 烧瓶设置(显然)
- Flask setup 收到对 Scrapy 的请求 -> 启动 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 任务的静态方式吗?因为我会喜欢那个....
【问题讨论】:
标签: python scrapy celery scrapy-pipeline