python之线程相关操作(补充)
1 线程的其他方法
import threading
import time
from threading import Thread, current_thread def f1(n):
time.sleep(1)
print('子线程名称', current_thread().getName())
print('子线程id', current_thread().ident)
print('%s号线程任务' % n) if __name__ == '__main__':
t1 = Thread(target=f1, args=(1,))
t1.start()
t2 = Thread(target=f1, args=(1,))
t2.start()
print('主线程名称', current_thread().getName())
print('主线程id', current_thread().ident)
print(current_thread()) # 当前线程对象
print(threading.enumerate()) # 当前正在运行的线程对象的一个列表
print(threading.active_count()) # 当前正在运行的线程数量
2 线程队列
首先导入模块 import queue
先进先出队列:queue.Queue(3)
先进后出\后进先出队列:queue.LifoQueue(3)
优先级队列:queue.priorityQueue(3)
其中都是相同的方法
import queue # # 先进先出队列
# q = queue.Queue(3)
# q.put(1)
# q.put(2)
# print('当前长度', q.qsize())
# print('是否满了', q.full())
# q.put(3)
# print('是否满了', q.full())
# try:
# q.put_nowait(5)
# except Exception:
# print('满了')
# print(q.get())
# print(q.get())
# print('是否空了', q.empty())
# print(q.get())
# print('是否空了', q.empty())
# try:
# print(q.get_nowait())
# except Exception:
# print('空了') # # 先进后出队列, 类似于栈
# q = queue.LifoQueue(3)
# q.put(1)
# q.put(2)
# q.put(3)
#
# print(q.get())
# print(q.get())
# print(q.get())
# '''
#
#
#
# ''' # 优先级队列
q = queue.PriorityQueue(7)
q.put((6, 'today')) # 存放一个元组, 第一个元素是优先级, 越小优先级越高
q.put((-3, 'yesterday'))
q.put((5, 'tomorrow'))
q.put((12, 12))
q.put((5, 'July'))
q.put((7,23))
q.put((7,123)) print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
'''
(-3, 'yesterday')
(5, 'July')
(5, 'tomorrow')
(6, 'today')
(7, 23)
(7, 123)
(12, 12)
'''
3 线程池
首先导入
From concurrent_futures import ThreadPoolExecutor,ProcessPoolExecutor
import time
from threading import current_thread
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor def f1(n,s):
time.sleep(1)
# print('%s号子线程'%current_thread().ident)
# print(n,s)
return if __name__ == '__main__':
tp = ThreadPoolExecutor(4)
# tp = ProcessPoolExecutor(4)
# tp.map(f1,range(10)) #异步提交任务,参数同样是任务名称,可迭代对象
res_list = []
for i in range(10):
res = tp.submit(f1,i,'baobao') #submit是给线程池异步提交任务,
print(res)
# res.result()
res_list.append(res) # for r in res_list:
# print(r.result()) tp.shutdown() #主线程等待所有提交给线程池的任务,全部执行完毕 close + join
for r in res_list:
print(r.result()) # 和get方法一样,如果没有结果,会等待,阻塞程序
print('主线程结束')
线程池回调函数:
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor def f1(n, n1):
return n + n1
def f2(n):
print(n) # <Future at 0x25bc198 state=finished returned int>
print('这里是回调函数:', n.result()) # 这里是回调函数: 23 if __name__ == '__main__':
tp = ThreadPoolExecutor(4)
res = tp.submit(f1, 11,12).add_done_callback(f2)
python之线程相关操作(补充)的更多相关文章
- python之线程相关操作
1.线程: 一个进程可以有多个线程,共享一个进程的资源: 2.进程线程的区别: 进程是资源分配的最小单位,线程是程序执行的最小单位 3.python中线程模块threading, 提供的类: Thr ...
- Python字符串的相关操作
1.大小写转换 判断字符串 s.isalnum() #所有字符都是数字或者字母 s.isalpha() #所有字符都是字母 s.isdigit() #所有字符都是数字 s.islower() #所有字 ...
- Selenium2+python自动化40-cookie相关操作
前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...
- python文件的相关操作
python 目录 python 1.python文件的介绍 使用文件的目的 Python文件的类型主要有两种:文本文件和二进制文件. 操作文件的流程主要有三步:打开-操作-关闭操作. 2.文件的打开 ...
- python基础之数据类型操作补充,集合及其操作,深浅拷贝
内容概要: 数据类型操作补充 集合及其操作 深浅拷贝1.基础数据类型补充 1.1字符串的操作补充li = ["李嘉诚", "麻花藤", "黄海峰&qu ...
- Selenium2+python自动化40-cookie相关操作【转载】
前言 虽然cookie相关操作在平常ui自动化中用得少,偶尔也会用到,比如登录有图形验证码,可以通过绕过验证码方式,添加cookie方法登录. 登录后换账号登录时候,也可作为后置条件去删除cookie ...
- Python字典及相关操作(内含例题)
Python字典类型 今天将会介绍一种在python中十分常见的组合数据类型——字典 通过一些实例来理解字典中的常规操作 什么是字典类型? 列表中查找是通过整数的索引(元素在列表中的序号)来实现查找功 ...
- python之线程相关的其他方法
一.join方法 (1)开一个主线程 from threading import Thread,currentThread import time def walk(): print('%s is r ...
- Python系统(os)相关操作
文件操作 python中常用于文件处理的模块有os,shutil等. 1 创建文件 文件的创建可以使用open()函数,如下创建一个test_file.txt的文件: >>> wit ...
随机推荐
- 安装VS2017后打开项目提示 asp.net 4.0尚未web服务器注册
Visual Studio 2017 出来了,手痒安装完成后打开原来的项目缺提示,asp.net 4.0尚未web服务器注册.郁闷了… 按照提示的方法,如何:将 ASP.NET Web 应用程序升级到 ...
- 彻底理解Java中的基本数据类型转换(自动、强制、提升)
说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示. 重新温故了下原始数据类型,现在来解释下它们之间的转换关系. 自动类型转换 自 ...
- shell编程中如何执行oracle语句
shell编程中如果向oracle中插入数据之类的,需要先把执行语句放到文件中,然后再@这个文件执行 有如下俩种方式供参考: SQL=`sqlplus user/pwd@orains << ...
- app测试环境搭建(python)
app测试环境的搭建大致如下几个: 1.appium安装 appium-server或者使用appium-desktop都可以,前者已经不再更新 下载地址:appium.io 2.Android SD ...
- Redis主从同步原理-SYNC【转】
和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级 ...
- MobaXterm不能读取C:\Windows\system32作为系统变量
OS环境:Win7 pro x64 已勾选:Settings-->Terminal-->勾选Use Windows PATH environment 然后在MobaXterm中查看系统变量 ...
- Oracle 创建表并设置主键自增
创建数据库 CREATE TABLE STUDENT(ID NUMBER PRIMARY KEY, NAME VARCHAR(200) NOT NULL, SEX VARCHAR(200), CREA ...
- 我们自研的那些Devops工具
随着云技术以及容器技术的崛起,人肉运维的时代结束了 2018年为了解决日常运维中的痛点以及更高效的推进运维工作,我们自研并完善了几个工具系统,这些系统无一例外的帮我们节约了时间,提高了效率,这篇文章将 ...
- Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单
动态加载菜单 之前我们的导航树都是写死在页面里的,而实际应用中是需要从后台服务器获取菜单数据之后动态生成的. 我们在这里就用上一篇准备好的数据格式Mock出模拟数据,然后动态生成我们的导航菜单. 接口 ...
- 一、Windows下Git的安装与配置
一.下载Git安装包 1.打开Git的官方网站:https://git-scm.com/ 2.找到下载页:https://git-scm.com/downloads 3.找到Windows版本下载页面 ...