python——爬虫学习(day4)

以下内容是根据《Python爬虫开发与项目实战》一书学习时整理的,如果内容涉及到侵权等问题,请联系本人删稿。如果内容知识点有问题,也请联系本人,及时改正。

c、multiprocessing模块提供了一个Pool类来代表进程池对象

关于进程池的概念,请参见:https://blog.csdn.net/eagle_1036077338/article/details/72853178

Pool类似于进程池,可以提供指定数量的进程给用户调用,默认大小是CPU核数。程序运行时,如果有新的请求提出交到Pool中,并且进程池还没有满的时候,就会创建一个新的进程来给这个请求。但如果进程池已经满了,该请求就会等待,直到有别的请求的进程完成后,才会开始创建一个进程给该请求。

#coding=utf-8

'''
multiprocessing模块
Pool类来代表进程池对象

'''
from multiprocessing import Pool
import os,time,random

def run_task(name):
    print('Task %s (pid = %s) is Running...' % (name,os.getpid()))
    time.sleep(random.random()*3)
    print ('Task %s end' % (name))

if __name__ == '__main__':
    print ('Current process %s'% os.getpid())
    p = Pool(processes=3)   #向Pool请求3个进程
    for i in range(5):
        p.apply_async(run_task,args=(i,))     #创建5个任务

    print ('Waiting for all subprocesses done...')

    #  Pool对象调用join()方法会等待所有子进程执行完毕,调用join()之前必须先调用close()
    #  调用close()之后就不能继续添加新的Process了
    p.close()
    p.join()
    print ('All subprocesses done')

d、进程间通信

      Queue通信方式

      Queue是多进程安全的队列,可以使用Queue实现多进程之间的数据传递。有俩个方法:Put 和 Get

     》》》Put 方法:用以插入数据到队列中,有俩个参数:blocked 和 timeout。

                 1>   blocked为默认值true并且timeout为正值时,put方法会阻塞timeout指定的时间,直到该队列有剩余

的空间。如果超时,会抛出异常Queue.Full。

                 2>blocked为False,但是该队列已满,也会抛出异常。

    》》》Get 方法:可以在队列里面读取并且删除一个元素。有俩个参数:blocked 和 timeout。

                  1>   blocked为默认值true并且timeout为正值时,则在等待时间内不会取到任何元素,并且抛出异常:Queue.Empty

                  2>   blocked为false时,如果Queue有可用的值,则会返回该值,如果队列为空,就会抛出异常

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值