Python 常用模块threading和Thread模块之线程池

作者:??孤寒者???? 时间:2022-02-20 05:39:08 

1. 池的概念

Python 常用模块threading和Thread模块之线程池

主线程:

相当于生产者,只管向线程池提交任务。 并不关心线程池是如何执行任务的。

线程池:

相当于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行。并不关心是哪一个线程执行的这个任务。

2. 自定义线程池

# -*- coding: utf-8 -*-
from threading import Thread
from queue import Queue
import time

class ThreadPool:
   # 初始化
   def __init__(self, n):
       self.queue = Queue()
       for i in range(n):
           # 创建线程
           Thread(target=self.worker, daemon=True).start()#daemon是开启守护线程

# 执行任务
   def worker(self):
       while True:
           func, args, kwargs = self.queue.get()
           func(*args, *kwargs)
           self.queue.task_done()

# 获取任务,将任务添加到队列中
   def apply_async(self, target, args=(), kwargs={}):
       self.queue.put((target, args, kwargs))
   # 阻塞
   def join(self):
       self.queue.join()
def fun(x):
   print('爱孤寒者 第%s次' % x)
   time.sleep(3)
   print('帅哥美女就关注同名微信公众号【孤寒者】啦~')

# 开两个线程
t = ThreadPool(2)
# 提交10个任务
for i in range(10):
   t.apply_async(fun, args=(i,))
t.join()

Python 常用模块threading和Thread模块之线程池

3. 使用Python内置线程池

# -*- coding: utf-8 -*-
from multiprocessing.pool import ThreadPool
import time
pool = ThreadPool(2)  # 创建两个线程
def funa(x, y):
   print('%s好好学习' % x)
   time.sleep(3)
   print('天天向上')
def funb(x, y):
   print('%shello' % x)
   time.sleep(3)
   print('world')

# 我们这就是有一个线程池,里面有两个等待处理任务的线程,然后这两个函数就是两个任务,
# 线程池里一个线程处理一个,所以会同时输出!如果多于两个任务就会执行等待sleep

pool.apply_async(funa, args=('我们要————', 2))  # 将任务添加到线程池
pool.apply_async(funb, args=('大家要————', 4))

pool.close()  # close之后则无法向线程池提交任务

# 内置线程池,自带守护线程,主线程结束,子线程也跟着结束
# 所以需要加阻塞,否则主线程一结束,子线程也跟着结束,无输出
pool.join()  # 在join之前可使用终止线程,直接终止线程pool:  pool.terminate()

print('这是程序的最后一行,执行到这里,主线程结束')

Python 常用模块threading和Thread模块之线程池

4. 池的其他操作

操作一: close - 关闭提交通道,不允许再提交任务;

操作二: terminate - 中止进程池,中止所有任务 。

拓展: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。 是用来存储和交换文本信息的语法。

数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组

使用 JSON 函数需要导入 json 库:import json。

json,用于字符串 和 python数据类型间进行转换json模块提供了四个功能:dumps、dump、loads、load

  • 1.json.dumps 将 Python 对象编码成 JSON 数据

  • 2.json.dump 将 JSON 数据通过特殊的形式转换为只有 Python 认识的字符串并写入文件

  • 3.json.loads 将已编码的 JSON 数据解码为 Python 对象

  • 4.json.load 将一个包含 JSON 格式数据的可读文件解码为一个 Python 对象并写入文件

来源:https://juejin.cn/post/7108150041222578206

标签:Python,threading,Thread,线程池
0
投稿

猜你喜欢

  • python 实现非极大值抑制算法(Non-maximum suppression, NMS)

    2021-01-18 21:46:20
  • JavaScript版的DateAdd、DateDiff、IsDate函数

    2008-01-30 15:35:00
  • .NET Core2.1如何获取自定义配置文件信息详解

    2023-07-17 16:26:34
  • 如何用Axure制作Tab页签

    2009-02-08 17:53:00
  • Python数据分析之获取双色球历史信息的方法示例

    2022-10-05 21:16:34
  • python安装库的最详细方法(以安装pygame库为例)

    2021-03-08 04:29:40
  • Go微服务项目配置文件的定义和读取示例详解

    2023-06-23 22:48:50
  • Python定时执行之Timer用法示例

    2021-09-14 21:46:01
  • 如何把图片也存到数据库中去?

    2009-11-06 13:56:00
  • 基于JS判断iframe是否加载成功的方法(多种浏览器)

    2023-08-24 04:14:52
  • Python中re模块常用方法总结分析

    2022-10-27 14:40:20
  • Python docutils文档编译过程方法解析

    2023-01-20 16:41:23
  • 在FLASH中调用ASP的方法

    2009-03-09 18:32:00
  • 解决MySQL启动时1067错误

    2010-09-30 14:09:00
  • php 图片上添加透明度渐变的效果

    2023-10-23 09:00:02
  • Python OpenCV读取png图像转成jpg图像存储的方法

    2023-01-07 13:23:56
  • python 实现一个反向单位矩阵示例

    2023-07-27 16:05:51
  • Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例

    2023-11-27 21:26:53
  • Python基于Matplotlib库简单绘制折线图的方法示例

    2021-10-26 15:01:12
  • Mysql Innodb 引擎优化

    2010-10-25 20:01:00
  • asp之家 网络编程 m.aspxhome.com