#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. scala def方法时等号和括号使用说明笔记

    scala定义方法时会指定入参和返回类型(无返回类型时对应Unit,即java和C中的void模式). 1.有入参,有返回类型时,scala具有类型推导功能,以下两种表达方式效果一样.但根据scala ...

  2. 10. react 基础 ref 的使用 及 React 16 的生命周期函数 及 生命周期函数使用场景

    一. ref 的使用 ( 直接获取 DOM 元素 ) 在 input 标签上 可以使用 ref 属性 获取当前DOM节点 eg: import React , { Component, Fragmen ...

  3. Python爬虫连载1-urllib.request和chardet包使用方式

    一.参考资料 1.<Python网络数据采集>图灵工业出版社 2.<精通Python爬虫框架Scrapy>人民邮电出版社 3.[Scrapy官方教程](http://scrap ...

  4. 【数据结构】Hash表简介及leetcode两数之和python实现

    文章目录 Hash表简介 基本思想 建立步骤 问题 Hash表实现 Hash函数构造 冲突处理方法 leetcode两数之和python实现 题目描述 基于Hash思想的实现 Hash表简介 基本思想 ...

  5. blueimp,预览遮罩范围控制

    blueimg gallery github地址:https://github.com/blueimp/Gallery/blob/master/README.md 使用前提,引用css和js < ...

  6. POJ 1201 Intervals【差分约束】

    传送门:http://poj.org/problem?id=1201 题意: 有n个如下形式的条件:,表示在区间[, ]内至少要选择个整数点.问你满足以上所有条件,最少需要选多少个点? 思路:第一道差 ...

  7. JAVA内存分配-通俗讲解

    Java的内存分配上,主要分4个块: 一块是用来装代码的,就是编译的东西. 一块是用来装静态变量的,例如用static关键字的变量,例如字符串常量. 一块是stack,也就是栈,是用来装变量和引用类型 ...

  8. 1.where子句的优化

    不需要在牺牲可读性的情况下重写sql,因为mysql会自动进行类似的优化. 1.去掉无用的括号 ((a AND b) AND c OR (((a AND b) AND (c AND d)))) -&g ...

  9. Properties in Algebra

    附录-Properties in Algebra 部分证明转载自标注,仅作个人整理查阅用. 范数 (norm) \(^{[1]}\) 要更好的理解范数,就要从函数.几何与矩阵的角度去理解,我尽量讲的通 ...

  10. LeetCode No.160,161,162

    No.160 GetIntersectionNode 相交链表 题目 编写一个程序,找到两个单链表相交的起始节点. 如下面的两个链表: 在节点 c1 开始相交. 示例 输入:intersectVal ...