day44-线程
#1、开启线程:
from threading import Thread
import os
def func():
print('func',os.getpid()) t = Thread(target=func)
t.start()
print(os.getpid())
# func 10452 #start之后马上执行func,说明开启线程很快。
# #2、主线程跟子线程异步:func睡眠1秒,但是最下面的打印还是会很快打印出来,说明各自干自己的事情,属于异步。
from threading import Thread
import os
import time
def func(): #子线程
time.sleep(1)
print('func',os.getpid()) t = Thread(target=func)
t.start()
print(os.getpid()) #主线程
#
# func 4616 #3、开启多线程:异步:
from threading import Thread
import os
import time
def func():
time.sleep(1)
print('func',os.getpid())
for i in range(6):
t = Thread(target=func)
t.start()
print(os.getpid()) # 设置join让上面代码的主线程阻塞,等待子线程结束后才结束(先执行子线程代码):
from threading import Thread
import time
import os
def func():
time.sleep(1)
print('func',os.getpid())
thread_l = []
for i in range(3):
t = Thread(target=func)
t.start()
thread_l.append(t)
[t.join() for t in thread_l] #相当于for t in thread_l:t.join(),让所有子线程先start执行,最后才设置join,
#可以一次性得到结果,下面主线程的代码和子线程各自干自己的事情,属于异步。
print(os.getpid())
# func 14808
# func 14808
# func 14808
# #下面代码属于同步:
from threading import Thread
import time
import os
def func():
time.sleep(1)
print('func',os.getpid())
for i in range(3):
t = Thread(target=func)
t.start()
t.join()#join写在for里面,每开启一个子线程,都让主线程等待,按顺序执行,属于同步。
print(os.getpid()) #4、验证在一个进程里面,线程之间的数据是共享的:利用这个特点就可以计算出线程的数量:
# 下面例子的进程id是一样的,说明系统调度了一个进程去执行一个任务,而这个任务分成了5个部分来执行。
from threading import Thread
import os
class MyThread(Thread):
count = 0 #静态属性
def __init__(self,arg1):
super().__init__()
self.arg1 = arg1 def run(self):
MyThread.count += 1
print('run',self.arg1,os.getpid()) for i in range(5):
t = MyThread(i)
t.start()
print(t.count) #打印出对象属性是5,说明线程之间的数据是共享的。
# run 0 5948
# run 1 5948
# run 2 5948
# run 3 5948
# run 4 5948 #pid一样,说明所有线程都在同一个进程里面。
# #5、打印出线程名字(name)、线程id(ident)、线程列表、线程列表数量:
import threading
import time
def func(i): #线程名字(name)、线程id(ident)
time.sleep(0.5) #睡眠一下让func执行久一点,因为这样下面才来得及统计线程列表数量。
print(i,threading.currentThread().name,threading.currentThread().ident) for i in range(5):
t = threading.Thread(target=func,args=(i,))
t.start() print(threading.enumerate()) #返回正在运行的线程列表
print(len(threading.enumerate())) #6,线程列表数量是6,主线程1个,子线程5个。
print(threading.activeCount()) #6,线程列表数量是6。
day44-线程的更多相关文章
- [ 高并发]Java高并发编程系列第二篇--线程同步
高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...
- [高并发]Java高并发编程系列开山篇--线程实现
Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- Java 线程
线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源.它与父进程的其他线程共享该进程的所有资 ...
- C++实现线程安全的单例模式
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...
- 记一次tomcat线程创建异常调优:unable to create new native thread
测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...
- Android线程管理之ThreadLocal理解及应用场景
前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- C#多线程之线程池篇2
在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...
- C#多线程之线程池篇1
在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
- k8s pod.yml解释
apiVersion: v1kind: Podmetadata: name: yueying namespace: kube-public labels: name: testpodssp ...
- Oracle 基础1
oracle基础 表空间: Oracle数据库对数据的管理是基于表空间的概念来的, 各种数据的以及存储数据的优化, 实际上也是通过优化表空间来实现的 表空间分类: 永久表空间 用来存放表的数据, 视图 ...
- eclipse导入tomcat源码
我的开发环境:windows7 64位 一.官网下载tomcat源码.在此奉上一站地址:http://archive.apache.org/dist/tomcat/: 二.编译源码生成.jar文件: ...
- Bugku 逆向
1.入门逆向 下载解压,在文件夹中打开命令行窗口执行一下:baby.exe 发现输出了一串字符,在将其放到IDA中然后是这样: 发现上面有一串输出和我们命令行窗口中的一样,但是下面为什么又多了一大溜东 ...
- import datetime
import datetimenow = datetime.datetime.now()print('当前时间:',now) 当前时间: 2019-11-21 11:11:58.093122
- Thread--lock,lockInterruptibly,tryLock,tryLock(long timeout, TimeUnit unit)
参考:http://www.dewen.net.cn/q/9077 http://coolxing.iteye.com/blog/1236909 lock,tryLock,lockInterrupti ...
- 数据类型操作简单对比(R和Python)
一.R方面 R中类型:向量(vector).数据框.矩阵.列表 数据处理转换时:数值型num.因子(factor).字符型等等 1)matrix feature:1.二维数组2.每个元素必须有相同的数 ...
- 《C++语言导学》小记
我看的这本是Bjarne Stroustrup写的,南开大学的杨巨峰和王刚译的.这本书不适合初学者看,我就是大概翻了翻其中感兴趣的章节. 这本书第14章的标题是“历史和兼容性”,这节内容我看了收获很深 ...
- FPGA的基本组成单元LUT,以及三种核的概念
.查找表 LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM. 这样也可以解释我们在设计中为 ...
- 吴裕雄--天生自然ShellX学习笔记:Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本.这样可以很方便的封装一些公用的代码作为一个独立的文件. Shell 文件包含的语法格式如下: . filename # 注意点号(.)和文件名中间有一空 ...