python 中多线程的使用示例
多线程执行中 如果要更新或者操作数据库,会导致数据库写入不成功,就可以通过,先执行线程,拿到线程返回值后,通过该返回值,去操作数据库
from concurrent.futures import ThreadPoolExecutor, as_completed
def get_status(info):
try:
title = info[0] # 标题
url = info[1] # 链接地址URL
TAG = info[2] # 是否下载过的标记
if TAG != 'A':
''' 这里写入 执行下载的方法'''
else:
print(f'跳过下载>>{title}<<数据已下载过')
except Exception as e:
print(f'数据异常>>{title}<<数据保存产生异常,异常代码{e}')
return title # 返回执行完毕的数据名称 用于多线程外执行其他方法 比如写数据库
def process_urls(infos): # 执行多线程下载 传入所有要下载的数据信息
with ThreadPoolExecutor(max_workers=5) as executor: # 线程5 ,根据要增加或者减少
future_to_url = {executor.submit(get_status, info): info for info in infos}
for future in as_completed(future_to_url): # 等待所有任务完成,并收集结果
try:
result = future.result() # 获取返回值 该返回值是title
# 以下用于 根据以上返回值需要执行的操作,,,,,,
# 比如通过以上返回值 执行 查询数据库-->更新数据(表示该标题的URL数据已经下载)
print(f'下载>>{result}<<数据已下载成功')
except Exception as e:
print(f"Error processing data: {e}")
infos = [('title1','url1','A'),('title2','url2',''),('title3','url3',''),('title4','url4',''),('title5','url5','')]
process_urls(infos) # 调用 多线程方法 执行 下载数据