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函数以避免高频访问
更多内容有待补充