写点什么

7. 简单生成器函数,Pool 实现多进程程序,异常管理,浏览器版本帮助手册

发布于: 刚刚

本篇博客继续为你的 Python 技能树补充知识点。

生成器函数

何为生成器,它的关键是生成一个值,而不是返回一个值。


生成器的实现


在函数中使用 yield 替换 return 即可。


# 声明一个生成器函数def my_func(x):    while x < 15:        x += 1        yield x

# 创建函数实例func = my_func(10)
# 使用 next 调用函数a = next(func)a = next(func)a = next(func)a = next(func)a = next(func) # 得到 15a = next(func) # 得到 StopIteration 异常print(a)
复制代码


使用生成器的好处是,可以提供惰性计算,如果数据集特别大的情况下,可以提高效率。


生成器表达式在 python 中,可以使用像列表解析式一样的格式定义生成器,语法格式如下:


(表达式 for 循环变量 in 序列)
复制代码


生成器表达式返回的是迭代,当请求元素时才会获取到元素具体值。

通过 Pool 函数实现多进程

Pool 实现多进程管理,可以忽略进程之间的交互。


import requestsfrom multiprocessing.dummy import Poolimport time
start_time = time.perf_counter()
urls = ["https://www.csdn.net/", "https://www.baidu.com/", "https://www.jianshu.com/", "https://juejin.cn/", "https://www.zhihu.com/"]
pool = Pool(2)
pool.map(requests.get, urls)
pool.close()pool.join()print("运行完毕,耗费时间为:", time.perf_counter() - start_time)# 运行完毕,耗费时间为: 0.703510638
# 普通调用for url in urls: requests.get(url)# 运行完毕,耗费时间为: 1.239038099
复制代码


上述代码分别使用了双进程和单进程进行测试,你也可以直接设置 Pool(1) 进行测试。


如果没有设置 Pool() 方法的参数,程序将默认使用系统所有可用的 CPU。

异常管理

在日常的代码编写过程中,调试 BUG 是最耗费时间与精力的地方。


之前的滚雪球相关博客中,我们已经知道通过 try-except 去捕获异常,除此之外,可以直接使用 raise 抛出异常。


代码格式如下:


raise Exception("异常错误提示信息")
复制代码


如果想要将异常信息记录到一个文件中,使用 traceback 模块即可。


import traceback
try: raise Exception("异常错误")except: with open("./error.txt", "w",encoding="utf-8") as f: f.write(traceback.format_exc()) print("异常错误写入成功!")
复制代码


断言 assert 断言也是代码完整性检查的工具,当代码存在错误时,会抛出异常。


断言代码格式如下:


assert 条件表达式 , 异常提示
复制代码


异常日志代码运行过程中的异常,可以使用 logging 模块进行记录。


import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logging.debug("程序日志开始记录")for i in range(1, 10): logging.debug("程序运行中," + str(i))
logging.debug("程序结束")
复制代码


如果不需要展示日志,只需要在代码开头加上 logging.disable(logging.CRITICAL),即可屏蔽所有日志输出。


日志级别如下所示:


  • DEBUG:最低级别;

  • INFO:记录程序中的一般事件;

  • WARNING:警告信息;

  • ERROR:程序错误;

  • CRITICAL:致命错误。


如果希望将日志记录到文件,只需要修改 logging.basicConfig 方法中的参数 filename,赋值指定文件即可。

python 帮助手册

在之前的博客中,咱们一直使用 dir 或者 help 查看某些函数或者对象的用法,其实从 Python 3.2 开始,可以使用 python -m pydoc -b 打开一本帮助手册(在浏览器展示)。



例如刚才用到 Pool,就可以在 http://localhost:1561/multiprocessing.html 查询到相关知识点。


写在后面

以上内容就是本文的全部内容。


更多精彩


发布于: 刚刚阅读数: 2
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
7. 简单生成器函数,Pool 实现多进程程序,异常管理,浏览器版本帮助手册