您的位置:首页 > 编程语言 > Python开发

关于Python35爬虫的一些个人想法(我是菜鸟)

2015-12-01 16:33 405 查看
最近打算写一个爬虫去爬取招聘网站的招聘信息,在经过一周的Python基本学习后,初步打算使用Python进行爬虫的开发。在初步接触后,本打算使用分布式结构进行爬取作业,但是却在测试过程中,发现一些问题。先贴上我写的测试用例

首先参照了官方文档的例子

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 爬虫 分布式