使用了一段时间的editplus之后,觉得很不方便,用pycharm又觉得很麻烦。
于是就让我找到了两个对新手很友好的编辑器。一个是Anaconda自带的Spyder(功能强大,除了一些我目前不用的操作外,不亚于pycharm),还有一个则是jupyter(没有自动补全,不过非常好用),两个均是免费,百度就可以下载。

补充:Anaconda是一个第三方工具包,如果要概括一下它的好处的话:我装scrapy只用了一个pip命令,没有任何报错。其实装很多库都是这样,特别适合新手。(它有很多的内置库,而且能解决大部分依赖关系)
——————————————————————————————————————————————
最近想爬一个小型网站,目前已经拿到的没有去重的URL有30万个(URL已经去重,但不同的URL可能得到同样的信息),我要进一步拿到URL的详细信息,但因为网站服务器抗压有限(前面的30万个url是因为网站有api,我直接拿到的),基于爬虫程序员的素质,我只能每爬一个URL就sleep几秒,这样就需要很长的一段时间了。(还是淘宝、知乎等大网站好,人家基本是你随便爬,在我的反爬虫下爬崩了我的网站算你强)

这样长时间的工作放在服务器在合适不过了,成功和出错都让它写日志文件,而且我直接简单粗暴的直接捕获所有异常,只要出错就在日志文件中写入错误信息和错误出现时爬取的URL。如果只是这样我还需要每天去看一下日志文件,有点麻烦。

那就让他发邮件吧,每爬取5000个URL让它向我发送一封邮件,内容只需要写入爬取的进度和日志文件就行(想知道怎么用python发邮件的直接百度即可,非常简单)。

当我高高兴兴的把它放在服务器后台运行的时候,发现它每隔一段时间就自己退出了。这怎么回事,我明明捕获了所有异常,而且30万的URL(URL是存储在MongoDB的)并没有爬完,这个退出间隔的时间还比较短,只爬取了不到1000的URL,百度一下发现是迭代mongoset.find()出现的问题,需要在find里加入no_cursor_timeout = True这个参数,可是运行一段时间程序还是自动关闭,不过爬取的URL变成两三千了,这是pymongo的bug吗。

这远远满足不了我的要求,突然想到可以用另一个程序来检测这个程序是否还在运行,如果是就继续检测,不是则获取进度重新运行。这个要实现的话,用多进程就行,具体代码如下:

while True:i = get_i()p = Process(target=main, args=(i,))p.start()p.join()send_mail('程序已经退出! 正在重新启动')

因为join是阻塞函数,所以程序运行到p.join()的时候就停在那里等子进程退出,如果退出就执行下面的内容。这样基本就完成了服务器持续运行爬虫了。

当然,还有另一种方法,可以用signal.signal()捕获子进程发出的SIGCHLD信号,这个信号是子进程退出时必然会发出的信号。有兴趣的可以学习一下。

现在发现原来有很多第三方工具可以管理进程,比如Supervisor就可以做到这种功能,这些工具的功能很完善,比自己写的程序好很多。所以还是直接使用第三方工具吧。

补充:在Windows测试遇到一个坑,MongoDB占用的内存不断增大,不会自动释放。唯一想到的解决方案只能每隔一段时间手动清理内存.(搜到一个工具,Mem Reduct),自动清理内存。不过只支持Windows。

Ubuntu服务器长时间运行爬虫程序相关推荐

  1. ubuntu服务器长时间不连接显示器后,连上显示器没反应

    解决方法1:连上显示器后重启 解决方法2:远程控制 sudo service lightdm start

  2. struts2 拦截器_Struts2 execAndWait拦截器示例,用于长时间运行的动作

    struts2 拦截器 Sometimes we have long running actions where user will have to wait for final result. In ...

  3. python怎么暂停运行_如何暂停长时间运行的循环?

    我有一个关于正在运行的程序的长时间问题.在本例中,我将使用Python,但它可以用于任何编程语言.在 比方说我想把所有的数字加起来,比如说10亿results = [] for i in range( ...

  4. Windows服务器长时间保持远程桌面不被自动断开的方法

    Windows服务器长时间保持远程桌面不被自动断开的方法 服务器在通过mstsc远程连接后,如果长时间不操作,会自动断开,对于服务器操作,这种断开可能会影响工作效率,如何设置可以一直保持连接状态呢? ...

  5. game module 停止运行_恒温摇床长时间运行的注意事项

    2020年10月30日 11:47   来源: 杭州川一实验仪器有限公司    >>进入该公司展台 产品简介 恒温摇床具有不锈钢万用夹具.数显控温.无级调速和良好的热循环功能,是一种多用途 ...

  6. Scrapy:运行爬虫程序的方式

    Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 在创建了爬虫程序后,就可以运行爬虫程序了.Scrapy中介绍了几种运行爬虫程序的方式,列举如下: -命令行工具之s ...

  7. server长时间运行query,Ajax刷新被block

    最近有个asp.net程序,需要长时间查 询数据库,千万级,且经常有reports同时运行,所以搞不好一个submit就要等1,2个小时.我把sql timeout设成无限,http request ...

  8. java jps都卡死,java长时间运行后,jps失效

    在部署完应用后,原本jps使用的好好的,能正确的查询到自己正在运行的java程序. 但,过了一段时间后,再使用jps来查看运行的应用时,自己运行的程序都看不到,但是自己也没有关闭这些程序啊!然而使用 ...

  9. python每天固定时间运行某程序代码

    一.场景描述:有一段python程序需要在制定的时间运行. 二.解决方案: 方案一:利用windows系统自带的计划任务来实现该功能,定好时间后,每天固定时间调用要执行的python程序,然后实现想要 ...

  10. 遇到Ubuntu系统自动杀死运行的程序问题

    之前在ubuntu运行一个程序,没有管他,一会后发现终端显示已杀死,我的程序也结束了. 然后查看系统日志,显示"Out of memory: Killed process -",知 ...

最新文章

  1. 详细说明Spring--AOP
  2. TM:宿主-细菌界面的MicroRNA:宿主防御或细菌攻击
  3. 人工智能在未来将要经历的七个阶段
  4. Java学习笔记31
  5. 在Ubuntu上安装openResty #1
  6. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(8) - 数据类型转换指令
  7. python 学习笔记(6)-转载
  8. php把路由放在数据库,PHP导入Excel到数据库的方法 PHP把数据库数据导出到方法
  9. 自动化CodeReview - ASP.NET Core请求参数验证
  10. arm-linux-gcc stdio.h,arm-linux-gcc stdio.h no such file or directory错误
  11. 创建shap文件的属性字段类型区别_shapefile数据文件组成
  12. javascript实现单例模式
  13. vsphere client下载地址
  14. OpenCV官方教程中文版
  15. ubuntu借助windows的网络共享上网
  16. OpenCV fitline直线拟合函数学习
  17. 利用 Docker 配置 Pytorch 镜像流程
  18. 美国白宫将探讨人工智能 概念股分析
  19. 山东科技大学计算机系招生,山东科技大学在职研究生计算机技术招生动态
  20. CSP开发基础--数字证书调用CSP过程

热门文章

  1. Mnist数据集介绍
  2. 啊哈C语言 第2章 梦想直航(第1-8讲)
  3. 关于身份证OCR识别,你知道多少?
  4. STM32控制AD7124采集调试流程
  5. SAAS PASS IASS 理解
  6. mysql 全关联查询_Mysql 关联查询(内联、左联、右联、全联)
  7. srsLTE测试SDR频偏
  8. office2013安装包下载,专业版完整版官方原版
  9. Linux下的HDFS命令
  10. 无人机如何通过GB28181协议接入视频会议