我现在有一个这样的需求:有一个爬虫函数是用Python写的,刚好现在有一个网站也是用Python的Tornado写的。我想实现在Tornado接收到一个新增任务的请求之后,自动将这个请求放入任务队列,然后爬虫函数自动从任务队列中取出数据来。
由于网站规模并不大,为了部署方便不想使用redis或者其他消息队列服务,如何让爬虫函数和Tornado写的web程序能够相互通信呢?
我现在的思路是建立一个main.py文件,然后先用queue模块创建一个队列,然后用threading库同时启动n个爬虫函数的线程从queue中取数据,然后Toronto的handler里面再往queue中put数据,但是用代码实现就会出现包循环引用导致报错的现象。有什么办法能够让两个模块共享一个线程安全的数据结构呢?
用数据库恐怕还是最好的方式
因为
1、要考虑任务修改,增加,中断, 放内存马上涉及到持久化的问题,自己解决不如用数据库。
2、哪些爬过了,哪些没有,什么时间爬出的,多久需要重爬一次,爬过的数据如何筛选处理,数据库都能轻而易举地实现
3、并发、扩展、备份数据都有现成的方案
建议参考一下pyspider的设计,题主提的功能对pyspider来说都是现成,重新写代码的必要性是不是要考虑一下呢?