关于Python35爬虫的一些个人想法(我是菜鸟)
2015-12-01 16:33
405 查看
最近打算写一个爬虫去爬取招聘网站的招聘信息,在经过一周的Python基本学习后,初步打算使用Python进行爬虫的开发。在初步接触后,本打算使用分布式结构进行爬取作业,但是却在测试过程中,发现一些问题。先贴上我写的测试用例
首先参照了官方文档的例子
Master.py
Worker_1.py
Worker_2.py
最后的结果是在Worker_2.py中可以打印出,Worker_1.py的 “测试” 字符串。
但是这种写法有个明显的问题,在主节点Master.py 中,是阻塞式也就是说运行了
但是这样操作,依然不能解决我需要在Master.py进行一些分发操作的需求
所以我只能暂缓使用该种方式,以期待通过后面学习或者博友们提供好方法。
附上一个错误解决方法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201910/30/a1d3c9b5262a9ec12abcb3da702cba1b)
这是因为在子进程中又创建了进程引起,解决方法为在if name==’main’主进程进行创建进程操作
首先参照了官方文档的例子
Master.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from multiprocessing.managers import BaseManager import queue queue = queue.Queue() class QueueManager(BaseManager): pass QueueManager.register('get_queue',callable=lambda : queue) m = QueueManager(address=('127.0.0.1',50000),authkey=b'abracadabra') s = m.get_server() s.serve_forever()
Worker_1.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- from multiprocessing.managers import BaseManager import queue class QueueManager(BaseManager): pass QueueManager.register('get_queue') m = QueueManager(address=('127.0.0.1',50000),authkey=b'abracadabra') m.connect() queues = m.get_queue() queues.put('测试')
Worker_2.py
from multiprocessing.managers import BaseManager import queue class QueueManager(BaseManager): pass QueueManager.register('get_queue') m = QueueManager(address=('127.0.0.1',50000),authkey=b'abracadabra') m.connect() queue = m.get_queue() print(queue.get())
最后的结果是在Worker_2.py中可以打印出,Worker_1.py的 “测试” 字符串。
但是这种写法有个明显的问题,在主节点Master.py 中,是阻塞式也就是说运行了
s.serve_forever()之后,该脚本中的其它程序也就无法正常执行。我理解,该类可以看做一个连接不同进程之间的桥梁。虽然Master.py 中也可以通过以下方法传递值:
from multiprocessing import Process, Queue from multiprocessing.managers import BaseManager import queue class Worker(Process): def __init__(self, q): self.q = q super(Worker, self).__init__() def run(self): self.q.put('local hello') if __name__ == '__main__': queues = Queue() w = Worker(queues) w.start() myQ = queue.Queue() class QueueManager(BaseManager): pass QueueManager.register('get_queue', callable=lambda: queues) QueueManager.register('get_myQ', callable=lambda: myQ) m = QueueManager(address=('127.0.0.1', 50000), authkey=b'abracadabra') s = m.get_server() s.serve_forever()
但是这样操作,依然不能解决我需要在Master.py进行一些分发操作的需求
所以我只能暂缓使用该种方式,以期待通过后面学习或者博友们提供好方法。
附上一个错误解决方法:
这是因为在子进程中又创建了进程引起,解决方法为在if name==’main’主进程进行创建进程操作
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- 爬虫笔记
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- Python在CAM软件Genesis2000中的应用
- python numpy数组的几种排序方式---by香蕉麦乐迪