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#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...
随机推荐
- 18 12 28 css 浮动 定位
浮动 浮动特性 1.浮动元素有左浮动(float:left)和右浮动(float:right)两种 2.浮动的元素会向左或向右浮动,碰到父元素边界.其他元素才停下来 3.相邻浮动的块元素可以并在一行, ...
- 【2017西安邀请赛:A】XOR(线段树+线性基)
前言:虽然已经有很多题解了,但是还是想按自己的理解写一篇. 思路:首先分析题目 一.区间操作 —— 线段树 二.异或操作 —— 线性基 这个两个不难想,关键是下一步的技巧 “或”运算 就是两个数的二进 ...
- vue组件传值 part2
非父子组件传值 轻量级 视图层框架 复杂组件间传值,引进其他的工具或者设计模式 1.vuex 2.总线机制 //main line 1.在main.js中注册全局的bus Vue.prototype. ...
- Linux--Centos7开启关闭端口
参考 http://blog.csdn.net/u013410747/article/details/61696178 查看已开放的端口(默认不开放任何端口) firewall-cmd --li ...
- atan2&sin
//弧度转化角度:弧度*180/PI //角度转化弧度:角度*PI/180 #include <math.h> #include <stdio.h> const double ...
- 计蒜客 密码锁(BFS)
https://www.jisuanke.com/course/1797/121114 Description 现在一个紧急的任务是打开一个密码锁.密码由四位数字组成,每个数字从 1 到 9 进行编号 ...
- CodeForces 382B 数学推导
这个题目题意简单,但是TLE得哭哭的... 输入 a b w x c五个数,最终要使得c<=a, 每一秒可以进行一个操作,如果b>=x,则 b=b-x,同时 c--;如果b<x,则a ...
- 微服务项目开发学成在线_day03 CMS页面管理开发
springboot引入mangodb依赖坐标:在spring-boot集成条件下,使用mongodb的DAO层开发. swagger查看接口文档,请求地址:http://localhost:3100 ...
- PAT Advanced 1078 Hashing (25) [Hash ⼆次⽅探查法]
题目 The task of this problem is simple: insert a sequence of distinct positive integers into a hash t ...
- Codeforces Round #555 (Div. 3) B. Long Number 【仔细读题】
B. Long Number time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...