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

最近打算写一个爬虫去爬取招聘网站的招聘信息,在经过一周的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进行一些分发操作的需求
所以我只能暂缓使用该种方式,以期待通过后面学习或者博友们提供好方法。

附上一个错误解决方法:
出现freeze_support错误

这是因为在子进程中又创建了进程引起,解决方法为在if name==’main’主进程进行创建进程操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值