python(35): 协程池 协程锁

协程池

import uuid

import gevent
from gevent import monkey, pool
import time, random
import urllib.request

monkey.patch_all()

jpg_num = 0


def down_load_img(img_uel, img_name):
    global jpg_num
    jpg_num += 1
    print("正在下载第{}张".format(jpg_num))

    img = urllib.request.urlopen(img_uel)  # 设置网络连接
    img_content = img.read()  # 读取网址信息
    # 设置一个新的文件并将信息写入
    with open(r"%s" % img_name, "wb") as f1:
        f1.write(img_content)
        time.sleep(random.random())
    time.sleep(2)


def main():
    p = pool.Pool(50)  # 创建协程池
    url = 'https://www.google.com/imgres?imgurl=https%3A%2F%2Fpic2.cwuzx.com%2Fe390d4d07e852ebc2de3bbbbfd08bb31db705194-800.jpg&imgrefurl=https%3A%2F%2Fwww.cwuzx.com%2Fimage%2F24.html&tbnid=VTjovih6x09TsM&vet=12ahUKEwi4n_fHm5nqAhXwzIsBHWacBQ0QMygFegUIARCrAQ..i&docid=HC2ZQVVBJ4T2qM&w=650&h=432&q=%E7%8C%AB%E5%9B%BE%E7%89%87&ved=2ahUKEwi4n_fHm5nqAhXwzIsBHWacBQ0QMygFegUIARCrAQ'
    ret_list = [url for i in range(0,1000)]

    # 重置列表
    num = 0
    my_list = []

    t_start = time.time()  # 设置开始时间
    for img_url in ret_list:
        my_list.append(p.spawn(down_load_img, img_url, "%s.jpg" % str(uuid.uuid4())))
        if num == 100:  # 设置想要的下载文件数量
            break
        num += 1

    gevent.joinall(my_list)  # 添加任务到协程池
    t_stop = time.time()  # 设置结束时间
    print("下载文件一共用了:%.2f秒" % (t_stop - t_start))  # 计时


if __name__ == '__main__':
    main()

协程锁  

协程锁官方文档: Synchronization Primitives — Python 3.10.2 documentation  


python 多进程池、多线程池、协程池 实现笔记【附源码】_马鹏飞_51CTO博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值