千家信息网

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
0