Python multiprocessing Pool的apply_async访问网页

原因:子进程去访问网页,主进程处理网页的结果

# coding=utf-8
import logging
import multiprocessing
import os
import re
import time
from urllib.request import urlopen

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s 【 %(process)d 】 %(processName)s %(message)s"
)

url_lst = [
    'http://www.baidu.com',
    'http://www.sohu.com',
    'http://www.sogou.com',
    'http://www.4399.com',
    'http://www.cnblogs.com',
]


def get_url (url):
    response = urlopen(url)
    ret = re.search('www\.(.*?)\.com', url)
    logging.info('%s finished' % ret.group(1))
    return (ret.group(1), response.read())


def call (content):
    url, con = content
    with open(url + '.html', 'wb')as f:
        f.write(con)


def main (ctx):
    start = time.time()
    p = ctx.Pool(5)
    for url in url_lst:
        p.apply_async(get_url, args=(url,), callback=call)
    p.close()
    p.join()
    logging.info(f"总花费时间:{time.time()-start}秒")


if __name__ == '__main__':
    # windows 启动方式
    multiprocessing.set_start_method('spawn')
    # 获取上下文
    ctx = multiprocessing.get_context('spawn')
    # 检查这是否是冻结的可执行文件中的伪分支进程。
    ctx.freeze_support()
    main(ctx)

输出:

2019-10-06 13:33:37,5836868 】 SpawnPoolWorker-2 sohu finished
2019-10-06 13:33:37,5994080 】 SpawnPoolWorker-1 baidu finished
2019-10-06 13:33:37,6373576 】 SpawnPoolWorker-4 4399 finished
2019-10-06 13:33:37,8286416 】 SpawnPoolWorker-3 sogou finished
2019-10-06 13:33:37,9722976 】 SpawnPoolWorker-5 cnblogs finished
2019-10-06 13:33:38,1924196 】 MainProcess 总花费时间:0.8429675102233887
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值