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) # 得到 15
a = next(func) # 得到 StopIteration 异常
print(a)
使用生成器的好处是,可以提供惰性计算,如果数据集特别大的情况下,可以提高效率。
生成器表达式
在 python 中,可以使用像列表解析式一样的格式定义生成器,语法格式如下:
(表达式 for 循环变量 in 序列)
生成器表达式返回的是迭代,当请求元素时才会获取到元素具体值。
通过 Pool 函数实现多进程
Pool 实现多进程管理,可以忽略进程之间的交互。
import requests
from multiprocessing.dummy import Pool
import 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 查询到相关知识点。
写在后面
以上内容就是本文的全部内容。
今天是持续写作的第 223 / 365 天。
可以关注,点赞、评论、收藏。
更多精彩
- 点赞
- 收藏
- 关注作者
评论(0)