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

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

2015-03-16 01:35 681 查看

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函数以避免高频访问

更多内容有待补充
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: