python3线程介绍01(如何启动和调用线程)
#!/usr/bin/env python
# -*- coding:utf-8 -*- import os
import time,random
import threading # 1-进程说明
# 进程是软件、程序执行的一个实例,每个运行的程序,可创建多个进程,但至少包含1个进程,进程提供程序执行时需要的所有资源
# 进程可以包含线程,每个进程至少包含一个线程
# 进程启动时,会创建1个线程即主线程,然后通过主线程创建需要的其他子线程 # 2-线程说明
# 线程是进程中的一个实体,为程序执行的最小单元,也是可被独立分派和执行基本单位
# 线程由线程ID,指令指针(PC)、寄存器集合、堆栈组成
# 线程不独占资源,可与同属同一进程的其他线程共享进程中的资源
# 每个应用程序,至少包含一个进程和一个线程
# 单个程序允许多个线程,完成不同的分工,被称为多线程处理 # 线程即执行上下文,1个CPU执行时所需的一串指令 # 3-多任务说明
# 执行多任务可通过 1-开启多个进程,每个进程包含1个线程,2-开启1个进程,进程中有多个线程,3-多个进程,每个进程包含多个线程
# 子进程返回0,父进程返回之进程ID,1个父进程可以fork很多子进程,父进程需记录每个子进程的ID,子进程通过getppid()得到父进程ID # threading 提供线程的各类操作
# 实现多线程可通过2种方式
# 方法1:继承Thread 通过start启动 并实现run方法
# 方法2:实例化threading.Thread类,并将线程要执行的任务函数做为参数传给线程
# start方法 启动线程并等待CPU调度 run方法 线程被CPU调度后自动执行的方法 # 启动线程方法1 继承Thread
class myThread(threading.Thread):
def __init__(self,thread_name):
super(myThread,self).__init__(name=thread_name) def run(self):
print("%s线程正在运行中..."%self.name) def show(targs):
time.sleep(1)
print("thread"+str(targs)+"\tis running....") # 启动线程方法2 实例化threading.Thread类
# threading.Thread(self, group=None, target=None, name=None,
# args=(), kwargs=None, *, daemon=None)
# group 用于扩展,target 可调用对象,在线程启动后执行
# name 线程名字 默认为"Thread-N"
# args 参数列表 kwargs 关键字参数 调用target时的参数
# daemon 线程启动方式 前台还是后台,默认为False 即前台线程
# daemon=False 前台线程:主线程执行过程中,前台线程也在执行,主线程执行完毕,等待前台线程执行完毕,程序才停止
# daemon=True 后台线程:主线程执行过程中,后台线程也在执行,主线程执行完毕,后台线程不论执行是否结束,程序也会停止 # 如果希望主线程等待子线程执行完毕后,程序才结束
# 可通过将子线程加入到主线程中 如,使用join方法,或者设置子线程为主现成的守护线程 setDaemon(True) # 程序执行时,主线程执行完毕,再等待子线程执行完后,程序才执行完毕 # 多核CPU用多进程 多进程的执行效率高于多线程
# CPU密集型任务使用多进程 IO密集型任务使用多线程 # join方式 在线程启动后,设置 将子线程加入 主线程 join()
def doWaiting():
print('start waiting:', time.strftime('%H:%M:%S'))
time.sleep(3)
print('stop waiting', time.strftime('%H:%M:%S')) t = threading.Thread(target=doWaiting)
t.start()
# 确保线程t已经启动 time.sleep(1)
print('start join')
# 将一直堵塞,直到t运行结束。
t.join()
print('end join') # setDaemon方式 线程启动前,设置setDaemon=True
def thread_fun():
print(threading.current_thread().getName(),"开始工作")
time.sleep(2)
print("子线程结束工作") for i in range(5):
t=threading.Thread(target=thread_fun,)
t.setDaemon(True)
t.start() print("主线程开始")
time.sleep(2)
print("主线程结束") # 活跃线程数
print(threading.active_count()) # daemon方式 线程启动前,设置daemon=False
def thread_fun():
print(threading.current_thread().getName(),"开始工作")
time.sleep(2)
print("子线程结束工作") for i in range(5):
t=threading.Thread(target=thread_fun,daemon=False)
t.start() print("主线程开始")
time.sleep(2)
print("主线程结束") # 活跃线程数
print(threading.active_count()) if __name__=='__main__':
for i in range(5):
# 方法1
myThread("thread-"+str(i)).start() # 方法2
t=threading.Thread(target=show,args=(i,))
t.start()
python3线程介绍01(如何启动和调用线程)的更多相关文章
- C# 委托高级应用----线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- 谈.Net委托与线程——创建无阻塞的异步调用(一)
前言 本文大部分内容来自于mikeperetz的Asynchronous Method Invocation及本人的一些个人体会所得,希望对你有所帮助.原英文文献可以在codeproject中搜索到. ...
- python3线程介绍02(线程锁的介绍:互斥、信号、条件、时间、定时器)
#!/usr/bin/env python# -*- coding:utf-8 -*- import threadingimport timeimport random # 1-互斥锁 Lock 同一 ...
- java线程介绍
文章讲解要点 1.线程创建几种方式2.线程常见设置方法,包括优先级.优先级休眠.停止等3.多线程间的数据交互与锁机制4.项目源码下载 线程介绍.png 一.线程创建方式 常见的线程创建方法以下三种 ...
- JVM 内部运行线程介绍
转(http://club.alibabatech.org/article_detail.htm?articleId=4) JVM 内部运行线程介绍 作者:蒋家佳/觉梦(支付宝开发工程师) 浏览量: ...
- Java多线程系列--“JUC线程池”01之 线程池架构
概要 前面分别介绍了"Java多线程基础"."JUC原子类"和"JUC锁".本章介绍JUC的最后一部分的内容——线程池.内容包括:线程池架构 ...
- MFC启动和关闭线程
1. 启动线程: CWinThread* AfxBeginThread( 线程函数,this ); 2.通常导致线程终止的两种情况是:控制函数退出或不允许线程完成运行.如果字处理器使用后台打印线程,若 ...
- java jstack dump 线程 介绍 解释
最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据. 前段时间因为系统代码问题,造成性能到了天花板,于是就dump了一份stack出来进行分析 ...
- Java并发——线程介绍
前言: 互联网时代已经发展到了现在.从以前只考虑小流量到现在不得不去考虑高并发的问题.扯到了高并发的问题就要扯到线程的问题.你是否问过自己,你真正了解线程吗?还是你只知道一些其他博客里写的使用方法.下 ...
随机推荐
- crm web ui
1:View中的field对应于model中的attribute. 2:custom controller具有更长的生存时间,能够在view中共享一些数据. 3:window是component的一个 ...
- google ---gson字符串数组用GSON解析然后用逗号隔开拼接,去掉最后一个逗号
public static void main(String[] args) { String ss= "[{\"type\":\"0\",\&quo ...
- phpsotrm 设置命名空间
PHPStorm 添加支持 PSR-4 命名空间前缀设置 许久没有更新博客啦, 太忙了, 七月这最后一天来写点自己在使用 PHPStorm 上的小却很有用的功能吧. PHPStorm 默认是使用 PS ...
- P2905 [USACO08OPEN]农场危机Crisis on the Farm
传送门 DP 设 f [ i ] [ j ] [ k ] 表示已经走了 i 步,向上走了 j 步,向右走了 k 步时能拯救的最多奶牛数(j,k可以为负,表示反向) 设 g [ i ] [ j ] 表示 ...
- Vue全家桶了解一下(待补充)
vue全家桶了解一下 一.vue+vue-router+vuex+axios1.vue:使用vue-cli,生成最基本的vue项目2.vue-router:vue项目中的路由管理插件3.vuex:vu ...
- CF 520 B. Two Buttons(bfs)
/*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思 ...
- day_05 字典
1. 字典 1.成对保存数据 ,以key:value形式保存 2.以{}表示,每项内容都是key:value,元素之间用逗号隔开 3.key是不可重复的 4.字典以hash算法来计算key的hash值 ...
- Go语言基础之6--值类型和引用类型
一. 引用类型 引用类型理解为(C语言):指针 Golang中只有三种引用类型:slice(切片).map(字典).channel(管道): 实例1-1 package main import &qu ...
- asp.net core 标签验证函数功能
public class AuthFilter : Attribute, IActionFilter { public void OnActionExecuted(ActionExecutedCont ...
- 如何用Rational rose创建类图
UML中各种图形概要: 图名 对照 说明 用例图 use case diagram 用例图表明系统做什么,与谁交互.用例是系统提供的功能,参与者是系统与谁交互,参与者可以是人.系统或其他实体.一个系统 ...