Python如何实现多线程处理任务
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,小编给大家分享一下Python如何实现多线程处理任务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!读取Excel数据 -> 发送到行政服务接口安全起见线上操作放在了晚上进行。运行时发
千家信息网最后更新 2025年11月07日Python如何实现多线程处理任务
小编给大家分享一下Python如何实现多线程处理任务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
读取Excel数据 -> 发送到行政服务接口
安全起见线上操作放在了晚上进行。运行时发现每条数据导入消耗1s多,晚上十点开始跑这几千条数据想想都让人崩溃。
等着也是干等,下楼转两圈透透气,屋里龌龊的空气让人昏昏沉沉,寒冷让人清醒不少,突然想到为什么不用多线程呢?
第一版多线程和处理业务的程序糅合在了一起,跟屎一样难读。后面两天又抽了点时间重构了几个版本,分离出来一个线程池、迭代器和import_records。
清晰不少,但是迭代器被暴露了出来,需要import_records调用一下判断当前任务是否给当前线程处理,类似协程的思路。
暴露有好有坏,但已基本满足日常使用,可以往一边先放放了。读读书、看看电影,不亦乐乎 :)。
import threadingdef task_pool(thread_num, task_fn): if thread_num <= 0 : raise ValueError threads = [] def gen_thread_checker(thread_id, step): base = 1 i = 0 def thread_checker(): nonlocal i i += 1 # print((thread_id,i,step, i < base or (i - base) % step != thread_id)) if i < base or (i - base) % step != thread_id: return False return True return thread_checker for x in range(0, thread_num): threads.append(threading.Thread(target=task_fn, args=(x,thread_num, gen_thread_checker(x, thread_num)))) # 启动所有线程 for t in threads: t.start() # 主线程中等待所有子线程退出 for t in threads: t.join()
import argparseimport reimport requestsfrom openpyxl import load_workbookfrom requests import RequestExceptionimport myThreadparser = argparse.ArgumentParser(description='美餐到店交易数据导入')parser.add_argument('--filename', '-f', help='美餐到店交易数据 .xlsx 文件路径', required=True)parser.add_argument('--thread_num', '-t', help='线程数量', default= 100, required=False)parser.add_argument('--debug', '-d', help='调试模式', default= 0, required=False)args = parser.parse_args()filename = args.filenamethread_num = int(args.thread_num)debug = args.debugif debug: print((filename,thread_num,debug))def add_meican_meal_record(data): passdef import_records(thread_id, thread_number, thread_checker): wb = load_workbook(filename=filename) ws = wb.active for row in ws: #------------------------------------------ if row[0].value is None: break if not thread_checker(): continue #------------------------------------------ if row[0].value == '日期' or row[0].value == '总计' or not re.findall('^\d{4}-\d{1,2}-\d{1,2}$', row[0].value): continue else: date = str.replace(row[0].value,'-', '') order_id = row[3].value restaurant_name = row[5].value meal_plan_name = row[6].value meal_staffid = row[10].value identify = row[11].value add_meican_meal_record({ 'orderId':order_id, 'date': date, 'meal_plan_name':meal_plan_name, 'meal_staffid':meal_staffid, 'identify':identify, 'restaurant_name':restaurant_name })myThread.task_pool(thread_num,import_records)看完了这篇文章,相信你对"Python如何实现多线程处理任务"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
线程
数据
处理
任务
篇文章
美餐
交易
迭代
昏昏
龌龊
安全
寒冷
不亦乐乎
不用
业务
完了
思路
接口
数量
文件
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
r如何录入数据库
朝阳区专业性软件开发价格信息
医疗机构有服务器吗
h2数据库日志文件
书目数据库提供原文吗
填写数据库名怎么填
属于数据库系统的组成部分的是
orl数据库修改最大连接数
幻塔为什么登录过的服务器要排队
高性能人工智能服务器
抚州服务器机柜
用户操作日志插入数据库
网络安全三同步集中管控平台
网络安全警察的考试
某网站的用户数据库泄露影响
代表互联网科技的符号
计算机三级网络技术40套
网络安全产业园 规划
软件开发人如何转型
哪种云服务器做亚马逊好
哪些软件开发程序值得学习
arma3服务器游戏进不去
辽宁通用服务器云服务器
武汉 网络安全人才会议
软件开发发布
网络安全的重要作用
字符串变量怎么复制给数据库
创业网络安全
网络技术结构图
安徽省合肥阜阳技校软件开发