在Python的开发实践中,第三方库为我们提供了强大的功能支持。今天,我们将探讨requests库的高级用法、pandas库中的apply与向量化操作优化,以及logging模块的定制日志配置,帮助大家更高效地使用这些工具。
一、requests高级用法:会话保持、重试机制、流式下载
requests是Python中处理HTTP请求的常用库,它的一些高级特性可以让网络请求更加高效和灵活。
会话保持
通过requests.Session()可以创建一个会话对象,它会跨请求保持某些参数,例如cookies,直到会话被显式关闭。
import requests
with requests.Session() as session:
session.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
response = session.get("http://httpbin.org/cookies")
print(response.text) # 查看cookie信息
重试机制
可以使用
requests.adapters.HTTPAdapter来实现请求的重试机制。
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
retry_strategy = Retry(
total=3,
status_forcelist=[429, 500, 502, 503, 504],
method_whitelist=["HEAD", "GET", "OPTIONS"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
http.mount("http://", adapter)
流式下载
对于大文件,可以使用requests的流式下载功能,以节省内存。
response = requests.get('https://example.com/largefile.zip', stream=True)
with open('largefile.zip', 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
二、pandas的apply与vectorization优化:性能差异对比
pandas是Python数据分析的基石,合理使用apply和向量化操作可以显著提高代码性能。
使用apply
import pandas as pd
df = pd.DataFrame({'value': [1, 2, 3, 4]})
df['squared'] = df['value'].apply(lambda x: x**2)
向量化操作
df['squared'] = df['value'] ** 2
向量化操作通常比apply更快,因为它直接操作底层数据,而不需要Python层面的循环。
三、logging模块定制日志:多处理器、过滤器与日志格式配置
logging模块是Python的标准库,用于记录日志信息。
多处理器日志
import logging
from logging.handlers import QueueHandler, QueueListener
import queue
log_queue = queue.Queue(-1) # 不限制队列大小
queue_handler = QueueHandler(log_queue)
listener = QueueListener(log_queue, *handlers) # handlers是日志处理器列表
listener.start()
过滤器
class OnlyErrorFilter(logging.Filter):
def filter(self, record):
return record.levelno >= logging.ERROR
logger.addFilter(OnlyErrorFilter())
日志格式配置
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
通过以上内容,我们了解了requests库的高级用法,pandas中的性能优化技巧,以及logging模块的定制日志配置。掌握这些高级特性,可以让我们的Python编程更加高效和强大。希望本文对大家有所帮助!