Python 常用模块threading和Thread模块之线程池
作者:??孤寒者???? 发布时间:2022-02-20 05:39:08
标签:Python,threading,Thread,线程池
1. 池的概念
主线程:
相当于生产者,只管向线程池提交任务。 并不关心线程池是如何执行任务的。
线程池:
相当于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行。并不关心是哪一个线程执行的这个任务。
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()
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('这是程序的最后一行,执行到这里,主线程结束')
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接口测试,对于接口测试完全小白。大概一周的学习成果进行总结。1.接口测试:目前涉及到的只是对简单单一的接口进行参数传递,
- 今天给大家分享小编遇到的一个坑有关python递归调用中的坑:打印有值, 返回却None问题。问题:前几天写一个小面试题, 忽然有个惊悚的发
- 引言本文介绍的如何使用Pandas来读取各种json格式的数据,以及对json数据的保存读取json数据使用的是pd.read_json函数
- 引言做接口测试的时候,避免不了操作数据库。因为数据校验需要,测试数据初始化需要、一些参数化场景需要等。数据库操作框架设计这里主要操作mysq
- 一、Tesseract简介Tesseract是一个OCR库(OCR是英文Optical Character Recognition的缩写),
- 写在前面题目所说的并不是目的,主要是为了更详细的了解网站的反爬机制,如果真的想要提高博客的阅读量,优质的内容必不可少。了解网站的反爬机制一般
- Mysql的安装方法 安装mysql的步骤如下:请注意按图中所示,有些选项和默认是不一样的。同时,如果您是重新安装mysql的话,要注意先备
- jTopo 帮助说明网站http://www.jtopo.com/index.html使用例子:http://www.jtopo.com/d
- JDBC数据库连接MySQL中建表在终端使用命令mysql -u root -p打开数据库,在数据库操作环境下进行创建数据库,建表等等操作建
- 简介mysql应该是我们在日常工作中使用到的一个非常普遍的数据库,虽然mysql现在是oracle公司的,但是它是开源的,市场占有率还是非常
- 1.conn.php <? $host="localhost"; //数据库服务器名称 $user="r
- 之前看到过很多人写的飞机大战,当然了之前我也写过多个版本,总体来说功能是实现了,但总感觉不够“炫”今天浏览Python资料的时候,意外发现了
- 1.Series介绍Pandas模块的数据结构主要有两种:1.Series 2.DataFrameSeries 是一维数组,基于Numpy的
- 1 注释符注释是指程序代码中不执行的文本字符串,是对程序的说明,可以提高程序的可读性,使程序代码更易于维护,一般嵌入在程序中并以特殊的标记显
- 前言本文主要跟大家分享了关于Ubuntu 18.04配置mysql及配置远程连接的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看
- yield的功能类似于return,但是不同之处在于它返回的是生成器。生成器生成器是通过一个或多个yield表达式构成的函数,每一个生成器都
- 什么是事务事务就是一组操作的集合,事务将整组操作作为一个整体,共同提交或者共同撤销这些操作只能同时成功或者同时失败,成功即可提交事务,失败就
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 2 - Selectors如果你还没有准备好,请先
- 本文实例为大家分享了Bootstrap导航条实现的具体代码,供大家参考,具体内容如下navbar-header:导航的头部,一般情况下用来放
- 执行文件和目标导入模块在同一目录直接import比如我要在ma_main.py中导入env包中的make_env.py文件, 从而读取其中的