python进阶 多线程编程 —— threading和queue库实现多线程编程)

  • 摘要
  • 多线程实现逻辑封装
  • 模型参数选择实例

摘要

本文主要介绍了利用python的 threading和queue库实现多线程编程,并封装为一个类,方便读者嵌入自己的业务逻辑。最后以机器学习的一个超参数选择为例进行演示。

多线程实现逻辑封装

实例化该类后,在.object_func函数中加入自己的业务逻辑,再调用.run方法即可。

# -*- coding: utf-8 -*-
# @Time : 2021/2/4 14:36
# @Author : CyrusMay WJ
# @FileName: run.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/Cyrus_May
import queue
import threadingclass CyrusThread(object):def __init__(self,num_thread = 10,logger=None):""":param num_thread: 线程数:param logger: 日志对象"""self.num_thread = num_threadself.logger = loggerdef object_func(self,args_queue,max_q):while 1:try:arg = args_queue.get_nowait()step = args_queue.qsize()self.logger.info("progress:{}\{}".format(max_q,step))except:self.logger.info("no more arg for args_queue!")break"""此处加入自己的业务逻辑代码"""def run(self,args):args_queue = queue.Queue()for value in args:args_queue.put(value)threads = []for i in range(self.num_thread):threads.append(threading.Thread(target=self.object_func,args = args_queue))for t in threads:t.start()for t in threads:t.join()

模型参数选择实例

# -*- coding: utf-8 -*-
# @Time : 2021/2/4 14:36
# @Author : CyrusMay WJ
# @FileName: run.py
# @Software: PyCharm
# @Blog :https://blog.csdn.net/Cyrus_May
import queue
import threading
import numpy as np
from sklearn.datasets import load_boston
from sklearn.svm import SVR
import logging
import sysclass CyrusThread(object):def __init__(self,num_thread = 10,logger=None):""":param num_thread: 线程数:param logger: 日志对象"""self.num_thread = num_threadself.logger = loggerdef object_func(self,args_queue,max_q):while 1:try:arg = args_queue.get_nowait()step = args_queue.qsize()self.logger.info("progress:{}\{}".format(max_q,max_q-step))except:self.logger.info("no more arg for args_queue!")break# 业务代码C, epsilon, gamma = arg[0], arg[1], arg[2]svr_model = SVR(C=C, epsilon=epsilon, gamma=gamma)x, y = load_boston()["data"], load_boston()["target"]svr_model.fit(x, y)self.logger.info("score:{}".format(svr_model.score(x,y)))def run(self,args):args_queue = queue.Queue()max_q = 0for value in args:args_queue.put(value)max_q += 1threads = []for i in range(self.num_thread):threads.append(threading.Thread(target=self.object_func,args = (args_queue,max_q)))for t in threads:t.start()for t in threads:t.join()# 创建日志对象
logger = logging.getLogger()
logger.setLevel(logging.INFO)
screen_handler = logging.StreamHandler(sys.stdout)
screen_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(module)s.%(funcName)s:%(lineno)d - %(levelname)s - %(message)s')
screen_handler.setFormatter(formatter)
logger.addHandler(screen_handler)# 创建需要调整参数的集合
args = []
for C in [i for i in np.arange(0.01,1,0.01)]:for epsilon in [i for i in np.arange(0.001,1,0.01)] + [i for i in range(1,10,1)]:for gamma in [i for i in np.arange(0.001,1,0.01)] + [i for i in range(1,10,1)]:args.append([C,epsilon,gamma])# 创建多线程工具
threading_tool = CyrusThread(num_thread=20,logger=logger)
threading_tool.run(args)

运行结果

2021-02-04 20:52:22,824 - run.object_func:31 - INFO - progress:1176219\1
2021-02-04 20:52:22,824 - run.object_func:31 - INFO - progress:1176219\2
2021-02-04 20:52:22,826 - run.object_func:31 - INFO - progress:1176219\3
2021-02-04 20:52:22,833 - run.object_func:31 - INFO - progress:1176219\4
2021-02-04 20:52:22,837 - run.object_func:31 - INFO - progress:1176219\5
2021-02-04 20:52:22,838 - run.object_func:31 - INFO - progress:1176219\6
2021-02-04 20:52:22,841 - run.object_func:31 - INFO - progress:1176219\7
2021-02-04 20:52:22,862 - run.object_func:31 - INFO - progress:1176219\8
2021-02-04 20:52:22,873 - run.object_func:31 - INFO - progress:1176219\9
2021-02-04 20:52:22,884 - run.object_func:31 - INFO - progress:1176219\10
2021-02-04 20:52:22,885 - run.object_func:31 - INFO - progress:1176219\11
2021-02-04 20:52:22,897 - run.object_func:31 - INFO - progress:1176219\12
2021-02-04 20:52:22,900 - run.object_func:31 - INFO - progress:1176219\13
2021-02-04 20:52:22,904 - run.object_func:31 - INFO - progress:1176219\14
2021-02-04 20:52:22,912 - run.object_func:31 - INFO - progress:1176219\15
2021-02-04 20:52:22,920 - run.object_func:31 - INFO - progress:1176219\16
2021-02-04 20:52:22,920 - run.object_func:39 - INFO - score:-0.01674283914287855
2021-02-04 20:52:22,929 - run.object_func:31 - INFO - progress:1176219\17
2021-02-04 20:52:22,932 - run.object_func:39 - INFO - score:-0.007992354170952565
2021-02-04 20:52:22,932 - run.object_func:31 - INFO - progress:1176219\18
2021-02-04 20:52:22,945 - run.object_func:31 - INFO - progress:1176219\19
2021-02-04 20:52:22,954 - run.object_func:31 - INFO - progress:1176219\20
2021-02-04 20:52:22,978 - run.object_func:31 - INFO - progress:1176219\21
2021-02-04 20:52:22,984 - run.object_func:39 - INFO - score:-0.018769934807246536
2021-02-04 20:52:22,985 - run.object_func:31 - INFO - progress:1176219\22

by CyrusMay 2021 02 04

在某个清晨
回望我一生
活得虽认真
却微小如尘
——————五月天(一半人生)——————

python进阶 多线程编程 —— threading和queue库实现多线程编程相关推荐

  1. python【Multiprocessing and threading】深入浅出多进程和多线程

    文章目录 1 概念 2 添加进程 Process 3 存储进程输出 Queue 4 效率对比 threading & multiprocessing 5 进程池 Pool 6 共享内存 sha ...

  2. Python实战之多线程编程threading.Thread

    Python实战之多线程编程threading.Thread 在Python中可以使用继承threading.Thread类来实现多线程编程,其中子类可以重写父类的__init__和run方法来实现用 ...

  3. 【python第三方库】python多线程编程---threading库

    文章目录 一.python多线程 1. GIL 二.threading库使用介绍 1. 创建多线程 2. 线程合并 3. 线程同步与互斥锁Lock 4. 死锁与可重入锁(递归锁)RLock 5. 守护 ...

  4. python并发编程:协程asyncio、多线程threading、多进程multiprocessing

    python并发编程:协程.多线程.多进程 CPU密集型计算与IO密集型计算 多线程.多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者-消费者爬虫 Lock解决线程安全问题 使用线程池 ...

  5. python queue threading_Python 多线程 -thread threading Queue- 简单学习

    Python 多线程 -thread threading Queue- 简单学习 在实际工作过程中,会出现需要并发的做一些事情,例如一台机器测到几千台机器的网络连通性,如果你单线程一台一台测的话,会花 ...

  6. 【Python】多线程及threading模块介绍

    ​目录 1. 多线程简单介绍 2. threading模块介绍 2.1 threading模块常用方法 2.2 Thread类使用 2.2.1 使用构造函数传递可调用对象的方法创建线程 2.2.2 继 ...

  7. python多线程库_python多线程库

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点:使 ...

  8. Python爬虫笔记——多线程(threading)传参

    参考文章: Python多线程3 多线程的传参与返回值 BBJG_001的博客--多线程 threading库知识点补充 学习网站: 莫烦Python 学习别人的经验: 在主线程用一个变量或者直接输出 ...

  9. python创建多线程_Python 多线程,threading模块,创建子线程的两种方式示例

    本文实例讲述了Python 多线程,threading模块,创建子线程的两种方式.分享给大家供大家参考,具体如下: GIL(全局解释器锁)是C语言版本的Python解释器中专有的,GIL的存在让多线程 ...

最新文章

  1. mysql 获取距离当前最新的记录_一文带你了解 MySQL 中的各种锁机制!
  2. 在RHEL5.0中用YUM解决RPM包的依赖关系
  3. MYSQL创建一个function用来计算经纬度距离
  4. Swift4.0 从相册中获取图片和拍照
  5. 大数相关计算(c语言版)
  6. psm倾向得分匹配法举例_倾向得分匹配法的详细解读
  7. 计算机应用研究参考文献格式,参考文献编写规则-计算机应用研究.PDF
  8. 塔防java_塔防游戏--java游戏
  9. qt打开xls文件_Qt读取excel文件的两种方法
  10. 什么是TPM设备管理系统?本文来告诉你
  11. 网站2008服务器32位好还是64位好,win server 2008 32位与64位区别
  12. 一些linux牛皮糖
  13. 计算机科学有科研,计算机科学领域科研合著网演化分析
  14. 蓝绿部署、AB测试、灰度发布、⾦丝雀发布、滚 动发布的概念与区别
  15. printf()中%n格式说明符
  16. Excel怎么样可以快速删除空白表
  17. 数据结构与算法(一):什么是数据结构?
  18. 选中一次格式刷,即可多次使用WPS格式刷的办法
  19. mac不断弹出提示 要信任此电脑吗
  20. nginx请求转发被拒绝_解决nginx反向代理proxy不能转发header报头

热门文章

  1. Spring Boot 2.x 启动全过程源码分析(全)
  2. Mycat:压测Mycat及结果分析
  3. citrix创建虚拟机服务器,在 ESXi 服务器上安装并配置 Citrix SD-WAN Center
  4. java filereader blob_二进制学习——Blob,ArrayBuffer、File、FileReader和FormData的区别
  5. java 反射set方法赋值_反射 根据属性名获得属性set方法并为set方法赋值
  6. 某大型数据中心离心式冷水机组 控制板UPS电源改造项目案例分享
  7. 计算机硬盘冒烟了,电脑硬盘冒烟损坏了怎么办?
  8. python统计单词平均长度_统计学的Python实现-014:几何平均数(衡量样本集中趋势)...
  9. ML:MLOps系列讲解之《基于ML的软件的三个层次之03 Code: Deployment Pipelines》解读
  10. 成功解决D8016“/ZI”和“/Gy-”命令行选项不兼容