首页 > 解决方案 > 一段时间后scrapy卡住了

问题描述

我在 aws ec2 上有一个使用 dask 分布式库的主从网络。现在我有一台主机和一台工作机。Master 有 REST api (flask) 用于在工作机器上调度scrapy 作业。我正在为 master 和 worker 使用 docker,这意味着 master 容器和 worker 容器都使用分布式 dask 相互通信。

当我调度scrapy作业时,抓取成功开始并且scrapy也将数据上传到s3。但是一段时间后,scrapy 会卡在某个点上,之后什么也没有发生。

请检查附加的日志文件以获取更多信息

日志.txt

2019-01-02 08:05:30 [botocore.hooks] DEBUG: Event needs-retry.s3.PutObject: calling handler <bound method S3RegionRedirector.redirect_from_error of <botocore.utils.S3RegionRedirector object at 0x7f1fe54adf28>>

scrapy 卡在上述点。

运行docker的命令:

sudo docker run --network host -d crawler-worker # for worker
sudo docker run -p 80:80 -p 8786:8786 -p 8787:8787 --net=host -d crawler-master # for master

我在新的 ec2 机器上也面临这个问题

标签: pythonamazon-web-servicesdockerscrapydask-distributed

解决方案


我解决了这个问题。问题出在子进程中,我使用它来执行带有参数 stdout=subprocess.PIPE 的scrapy,并且根据子进程的文档,wait() 函数在使用 stdout=subprocess.PIPE 或 stderr=subprocess.PIPE 时会导致死锁。


推荐阅读