python - 一段时间后scrapy卡住了
问题描述
我在 aws ec2 上有一个使用 dask 分布式库的主从网络。现在我有一台主机和一台工作机。Master 有 REST api (flask) 用于在工作机器上调度scrapy 作业。我正在为 master 和 worker 使用 docker,这意味着 master 容器和 worker 容器都使用分布式 dask 相互通信。
当我调度scrapy作业时,抓取成功开始并且scrapy也将数据上传到s3。但是一段时间后,scrapy 会卡在某个点上,之后什么也没有发生。
请检查附加的日志文件以获取更多信息
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 机器上也面临这个问题
解决方案
我解决了这个问题。问题出在子进程中,我使用它来执行带有参数 stdout=subprocess.PIPE 的scrapy,并且根据子进程的文档,wait() 函数在使用 stdout=subprocess.PIPE 或 stderr=subprocess.PIPE 时会导致死锁。
推荐阅读
- sql-server - SQL Server 代理作业未调用 Powershell 脚本
- matrix - 计算并显示 powerbi 中 1 个类别总数的百分比
- javascript - 在 React js 中传递多个道具的最佳方法
- node.js - 使用 Node 为 AAD 应用程序创建用户访问令牌
- laravel - 照片上传失败。Laravel 急流
- apache-spark - 了解 PySpark 中的 RDD(来自并行化)
- typescript - 无法在服务器端读取 requestResponse 调用的有效负载
- python - Python Pandas 代码需要一分钟多的时间来处理数据
- python - 如何分离从 Azure 获得的值作为请求响应?
- python - 获取持久功能活动的实时更新