#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-线程的更多相关文章

  1. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  2. [高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  3. 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)

    前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...

  4. Java 线程

    线程:线程是进程的组成部分,一个进程可以拥有多个线程,而一个线程必须拥有一个父进程.线程可以拥有自己的堆栈,自己的程序计数器和自己的局部变量,但不能拥有系统资源.它与父进程的其他线程共享该进程的所有资 ...

  5. C++实现线程安全的单例模式

    在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...

  6. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  7. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  8. C#多线程之线程池篇3

    在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...

  9. C#多线程之线程池篇2

    在上一篇C#多线程之线程池篇1中,我们主要学习了如何在线程池中调用委托以及如何在线程池中执行异步操作,在这篇中,我们将学习线程池和并行度.实现取消选项的相关知识. 三.线程池和并行度 在这一小节中,我 ...

  10. C#多线程之线程池篇1

    在C#多线程之线程池篇中,我们将学习多线程访问共享资源的一些通用的技术,我们将学习到以下知识点: 在线程池中调用委托 在线程池中执行异步操作 线程池和并行度 实现取消选项 使用等待句柄和超时 使用计时 ...

随机推荐

  1. Python中的抽象基类

    1.说在前头 "抽象基类"这个词可能听着比较"深奥",其实"基类"就是"父类","抽象"就是&quo ...

  2. redis常用命令--基础

    redis默认有个数据库,下标从开始,不支持自定义数据库名字. 使用select  index 切换数据库  : select 7 (切换到第八个数据库) dbsize:求当前数据库中键值对的数量. ...

  3. 代码review还是需要再仔细点-一次crash异常分析的总结

    版本发布之后,外网新增了一些crash, 从mini dump看,的确是有异常的,619行crash了. 代码如下: 奔溃的地方如下 可以看到是Zip add的时候指针空了, 为什么呢? 结合代码,可 ...

  4. pywin32获得tkinter窗口句柄,并在上面绘图

    想实现用win32 API在tkinter窗口上画图,那么应该先获得tkinter窗口的句柄hwnd,然后再获得tkinter的设备hdc.尝试了FindWindow(),GetActiveWindo ...

  5. Thread--停止线程

    参考:http://blog.sina.com.cn/s/blog_6ca570ed01016mti.html Thread.interrupt()方法不会中断一个正在运行的线程.它的作用是,在线程受 ...

  6. ubuntu 插网线无法上网解决方案

    前言 不知道最近是什么情况,ubuntu链接网线总是上不去网,但是wifi还能用,一直也就没有捣鼓,不过今天连wifi都不能用了,只能开始修理了. 修复方案 使用ifconfig命令查看以太网的名称 ...

  7. 取石子游戏(gcd)

    蒜头君和花椰妹在玩一个游戏,他们在地上将n颗石子排成一排,编号为1到n.开始时,蒜头君随机取出了2颗石子扔掉,假设蒜头君取出的2颗石子的编号为a, b.游戏规则如下,蒜头君和花椰妹2人轮流取子,每次取 ...

  8. 吴裕雄--天生自然ShellX学习笔记:Shell 数组

    数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下标由0开始. Shell 数组用括号来 ...

  9. PAT Basic 1104 数字⿊洞 (20) [数学问题-简单数学]

    题目 给定任⼀个各位数字不完全相同的4位正整数,如果我们先把4个数字按⾮递增排序,再按⾮递减排序,然后⽤第1个数字减第2个数字,将得到⼀个新的数字.⼀直重复这样做,我们很快会停在有"数字⿊洞 ...

  10. RabbitMQ 整合 SpringCloud实战

    RabbitMQ 整合 SpringCloud实战RabbitMQ 整合 SpringCloud实战rabbitmq-common 子项目rabbitmq-springcloud-consumer 子 ...