Python如何实现多线程处理任务
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,小编给大家分享一下Python如何实现多线程处理任务,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!读取Excel数据 -> 发送到行政服务接口安全起见线上操作放在了晚上进行。运行时发
千家信息网最后更新 2025年02月23日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安全错误
数据库的锁怎样保障安全
静安区数据软件开发费用是多少
服务器能用公网吗
mcgs怎么添加实时数据库
c 的数据库操作
李小云清华大学网络安全
公司网络安全隐患机房
数据库系统的三级模型是指
深圳费用决裁软件开发
新买的服务器有系统么
派出所网络安全保密工作小结
手机号办了信用数据库起什么作用
刷机后的平板无法接入服务器
饥荒专用服务器怎么选
哪个是数据库全文阅读软件
南通网络安全产业园
南京云存储服务器找哪家
控制网络技术基础课程实验
浪潮服务器管理平台
台湾的网络安全怎么样
安装路由器后网络连不上服务器
扫描表格数据库
sql数据库解密软件最新绿色版
谢继步召开网络安全会议
软件开发经理的职责是什么
获取数据库索引的sql语句
常用的法律检索数据库
飞机导航数据库丢失如何处理
昆山正规软件开发口碑
网络安全法三年级海报简单好看
火狐邮箱服务器的端口和ip