python3对多线程处理
参考博客: https://blog.csdn.net/u010339879/article/details/86506450
https://blog.csdn.net/qq_33961117/article/details/82462745
python线程介绍官网: https://docs.python.org/3/library/threading.html?highlight=threading#
python编程语言里面的任务和线程是很重要的一个功能, 这里面涉及到很多的东西, 具体可以查看上面我参考的博客地址,
这里只写出我个人对python多线程的理解.
先看下面的代码(摘抄其他博客, 同时自己在真实环境运行(我用的是python3.7.3版本)):
import threading
import time def T1_job():
print('T1 start')
for i in range(10):
print('begin sleep 0.1s')
time.sleep(0.1)
print('T1 finish') def T2_job():
print('T2 start')
print('T2 finish') def main():
print('---main begin----')
t1 = threading.Thread(target=T1_job, name='T1')
t2 = threading.Thread(target=T2_job, name='T2')
t1.start()
t2.start()
print('---main end----') if __name__ == '__main__':
main() 运行结果如下:
---main begin----
---main end----
T2 start
T1 start
begin sleep 0.1s
T2 finish
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
begin sleep 0.1s
T1 finish
主线程,main 很快就结束了, 子线程 T2先开始,然后 T1开始, T2很快就完成任务了, 然后经过漫长的等待最后也完成任务了. 这是没有用join 的情况. 即使 主线程main 停止了, 两个子线程 并不会直接退出. 而是要把自己各自的任务完成, 才会退出.
不知道T1还是T2先运行,代码里写的是T1开始, 但是打印出Log是T2先开始, 这可能和线程执行的任务多少有关系吧(个人理解),具体原因可能就是多线程造成的.
这里通过join ,可以让线程在这里等着,阻塞在这里,等线程跑完了
join 有一个参数 timeout 意思是等待时间, 如果超过等待的时间, 任务还没有完成那就不等待了,直接继续跑下面的代码.
如果任务 完成的时候, 没有超过等待时间, 那么就正常往下跑.
timeout 是一个float number 单位是秒
看下面的代码测试, 使用join来等待线程:
import threading
import time def T1_job():
print('T1 start')
for i in range(10):
print('begin sleep 0.5s')
time.sleep(0.5)
print('T1 finish') def T2_job():
print('T2 start')
print('T2 finish') def main():
print('---main begin----')
t1 = threading.Thread(target=T1_job, name='T1')
t2 = threading.Thread(target=T2_job, name='T2')
t1.start()
t2.start() t1.join(timeout=3)
print("t1 done") t2.join()
print("t2 done")
print('---main end----')
运行结果如下:
---main begin----
T1 start
begin sleep 0.5s
T2 start
T2 finish
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
t1 done # t1 继续往下跑
t2 done
---main end----
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
begin sleep 0.5s
T1 finish
python3对多线程处理的更多相关文章
- Python3.6+pyinstaller+Django
方案(一)Python3.6+pyinstaller+windows服务 一.Python3.6(64位)环境清单 Django==1.11.7 django-windows-tools==0.2 P ...
- python 多线程处理框架
多线程处理框架 python2.7 python3.5 多线程通用任务处理型驱动框架 probe_type 探测类型rtsp或者http task_queue 任务队列 task_handler 任务 ...
- python3 threading初体验
python3中thread模块已被废弃,不能在使用thread模块,为了兼容性,python3将thread命名为_thread.python3中我们可以使用threading进行代替. threa ...
- Python3中的字符串函数学习总结
这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...
- Mac-OSX的Python3.5虚拟环境下安装Opencv
Mac-OSX的Python3.5虚拟环境下安装Opencv 1 关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2 概述 本文是一篇 环境搭建 的基础 ...
- Ubuntu部署python3.5的开发和运行环境
Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...
- Python3 登陆网页并保持cookie
网页登陆 网页登陆的原理都是,保持一个sessionid在cookie然后,根据sessionid在服务端找到cookie进行用户识别 python实现 由于python的简单以及丰富的类库是开发网络 ...
- 阿里云 SDK python3支持
最近的一个项目需要操作阿里云的RDS,项目使用python3,让人惊讶的是官方的SDK竟然只支持python2 在阿里云现有SDK上改了改,文件的修改只涉及aliyun/api/base.py,详见h ...
- python3爬取1024图片
这两年python特别火,火到博客园现在也是隔三差五的出现一些python的文章.各种开源软件.各种爬虫算法纷纷开路,作为互联网行业的IT狗自然看的我也是心痒痒,于是趁着这个雾霾横行的周末瞅了两眼,作 ...
随机推荐
- pig语法学习 FOREACH GENERATE group AS
深入浅出,转一个 转载必须注明出处:http://www.codelast.com/ 转载地址 本文可以让刚接触pig的人对一些基础概念有个初步的了解. 本文大概是互联网上第一篇公开发表的且涵盖大量实 ...
- Luogu 4317 花神的数论题
披着数论题外衣的数位dp. 相当于数一数$[1,n]$范围内$1$的个数是$1,2,3,4,...log(n)$的数各有多少个,直接在二进制下数位dp. 然而我比较sb地把(1e7 + 7)当成了质数 ...
- glib-2.40编译安装
1 安装glib库所需要的依赖库: libffi-.tar.gz glib-.tar.xz 安装依赖库libffi: tar xf libffi-.tar.gz cd libffi- ./config ...
- C#的递归函数
我的理解:函数内部把自己当另一个函数来调用 其实还是调用的他自己 递归函数必须有结束条件,否则就是死循环
- 第一个Python工程
创建你的第一个Python程序 如果你曾经很熟悉visual studio的工作方式.可能对python不习惯. 工程通常只与你使用的IDLE有关系.这些工具习惯将文档,编译,测试集成一体.所以就存在 ...
- ProtoBuf练习(二)
重复数据类型 protobuf语言的重复字段类型相当于C++的std::list数据类型 工程目录结构 $ ls proto/ TServer.proto TSession.proto proto文件 ...
- Codeforces Round #524 (Div. 2) D(思维,构造)
#include<bits/stdc++.h>using namespace std;long long dp[107];int main(){ int cnt=1; dp[1 ...
- Elasticsearch+Logstash+Kibana搭建分布式日志平台
一.前言 编译安装 1.ELK简介 下载相关安装包地址:https://www.elastic.co/cn/downloads ELK是Elasticsearch+Logstash+Kibana的简称 ...
- 机房重构——泛型和“DataTable”
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
- 当重装eclipse后,给现有web项目添加tomcat的构建路径
在eclipse“首选项”-“service environment”中配置好tomcat后,给现有web项目添加构建路径: 1.选中一个web项目右键选中“构建路径”-“配置构建路径”