Python下的多进程实现——利用multiprocessing库实现并发爬虫

Python下的多进程实现——利用multiprocessing库实现并发爬虫

主要使用到的函数如下:
multiprocessing 库下的 Process
——实现多进程的主要函数
如果希望进程间共享数据,则使用Manager
——manager.dict( a ) 共享一个类型为字典的数据
——manager.list( a ) 共享一个类型为列表的数据
Value、Array,实现值共享、数组共享
——n = Value(‘i’, 7)
——x = Value(c_double, 1.0/3.0, lock=False)
if _name_ == ‘_main_‘:
——实现多进程的重要语句!类似于linux下的fork() == 0


和fork()实现多进程的不同之处:

  • linux下fork会复制前面的从程序开始的栈帧,一直到fork之前的全部内存区域 ,包括变量、函数表等等
  • 而python下略有不同的是,python并非复制,而是会执行一次前面的所有语句!
  • 因此!利用 if __name__ == '__main__': 语句是很重要的!

简单的附上一小段python代码

本文提到的一些用法在python的官方文档都可以找到,而且更加详细。链接:https://docs.python.org/2/library/multiprocessing.html#process-and-exceptions 敬请查阅!不再重复搬运

if __name__ == '__main__':
    for i in tailset:
        if os.path.exists(savepath+i):
            print i,'[skip]'
            continue
        else:
            p = Process(target = download, args = (i,website,bookname,savepath,bookname))
            allprocess.append(p)
    #print allprocess
    forkset = []
    count = 0
    for i in allprocess:
        i.start()
        forkset.append(i)
        count+=1
        if count == 16:#more than 16 will be dangerous
            for proc in forkset:
                proc.join()
            count = 0
            forkset = []
            sleep(1)

说明

主要功能是实现一个16进程并发的爬网页爬虫。
其中简简单单的实现了一个伪进程池。每16个进程为1组,添加sleep函数以避免高频访问

更多内容有待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值