(并发编程)线程 (理论-创建-lock-属性-守护,与进程的对比)
1、什么是线程
线程指的是一条流水线的工作过程(执行代码)
进程不是执行单位,是资源单位
一个进程内自带一个线程,线程是执行单位
1、同一进程内的线程们共享该进程内资源,不同进程内的线程资源肯定是隔离的
2、创建线程的开销比创建进程要小的多
主线程等待子线程结束然后结束,是等待这个进程的代码(其他非守护线程)执行完毕。
主线程:所以子线程结束才结束。
方式一:导入Thread模块
from threading import Thread
import time
print('%s is running' %name)
time.sleep(3)
t=Thread(target=task,args=('egon',))
t.start()
print('主线程')
from threading import Thread
import time
def run(self):
print('%s is running' %self.name)
time.sleep(3)
t=MyThread()
t.start()
print('主线程')
1、瞅一瞅PID (Process ID)
from threading import Thread
import time,os
print('%s is running' %os.getpid())
time.sleep(3)
t=Thread(target=task,)
t.start()
print('主线程',os.getpid()) #一个进程中的子线程pid相同
from threading import Thread
import time,os
def task():
global x
x=0
t=Thread(target=task,)
t.start()
t.join()
print('主线程',x) #主线程 0
from threading import Thread,current_thread,active_count,enumerate
import time,os
print('%s is running' %current_thread().name) #Thread-1 is running
time.sleep(3)
t1=Thread(target=task,name='第一个线程')
t2=Thread(target=task,)
t3=Thread(target=task,)
t1.start()
t2.start()
t3.start()
print(t1.is_alive()) #True
print(active_count()) #4
print(enumerate()) #[<_MainThread(MainThread, started 4320768832)>, <Thread(第一个线程, started 123145551912960)>, <Thread(Thread-1, started 123145557168128)>, <Thread(Thread-2, started 123145562423296)>] #当前活跃的线程
print('主线程',current_thread().name) #主线程 MainThread
from threading import Thread,current_thread
import time
print('%s is running' %current_thread().name)
time.sleep(3)
t1=Thread(target=task,name='第一个线程')
t1.daemon = True
t1.start()
import time
def foo():
print(123)
time.sleep(5)
print("end123")
print(456)
time.sleep(3)
print("end456")
t2=Thread(target=bar)
t1.start()
t2.start()
print("main-------")
123
456
main-------
end456
'''
主线程:所以子线程结束才结束。
总结:只要进程内没有可执行的代码守护就结束
from threading import Thread,Lock
import time
x=100
global x
mutex.acquire()
temp=x
time.sleep(0.1)
x=temp-1
mutex.release()
start=time.time()
t_l=[]
for i in range(100):
t=Thread(target=task)
t_l.append(t)
t.start()
for t in t_l:
t.join()
print(time.time()-start)
(并发编程)线程 (理论-创建-lock-属性-守护,与进程的对比)的更多相关文章
- Java并发编程:如何创建线程?
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- Java并发编程:线程和进程的创建(转)
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- 【转】Java并发编程:如何创建线程?
一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认是java.exe或者javaw.exe(windows下可以通过 ...
- 2、Java并发编程:如何创建线程
Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...
- Python并发编程-线程同步(线程安全)
Python并发编程-线程同步(线程安全) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 线程同步,线程间协调,通过某种技术,让一个线程访问某些数据时,其它线程不能访问这些数据,直 ...
- Java 并发编程 | 线程池详解
原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...
- java并发编程 线程基础
java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...
- python并发编程-线程和锁
什么是线程 进程:资源分配单位 线程:cpu执行单位(实体),每一个py文件中就是一个进程,一个进程中至少有一个线程 线程的两种创建方式: from multiprocessing import Pr ...
- python并发编程-进程间通信-Queue队列使用-生产者消费者模型-线程理论-创建及对象属性方法-线程互斥锁-守护线程-02
目录 进程补充 进程通信前言 Queue队列的基本使用 通过Queue队列实现进程间通信(IPC机制) 生产者消费者模型 以做包子买包子为例实现当包子卖完了停止消费行为 线程 什么是线程 为什么要有线 ...
随机推荐
- Python基础-简介一
一.Python介绍 1. Python的应用领域及流行程度 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间, ...
- spring对事务的配置
接下来我将给大家介绍spring事务配置的两种方式: 1.基于XML的事务配置.2.基于注解方式的事务配置. 前言:在我们详细介绍spring的两种声明式事务管理之前,我们需要先理解这些概念 1)sp ...
- Netty 4.1 Getting Start (翻译) + Demo
一.先来官方入门页面的翻译(翻译不好请多包涵) 入门 本章以简单的例子来介绍Netty的核心概念,以便让您快速入门.当您阅读完本章之后,您就能立即在Netty的基础上写一个客户端和一个服务器. 如果您 ...
- linux command ------ tar
-c: compress archives -x:decompress archives -t:check archives -z:whether it has the attribute of gz ...
- webstorm的一些小技巧
1.怎样禁止自动保存文件: 设置--->外观和行为--->常规--->Synchronization--->要么四个全不选,要么把最后两个不选 Settings--->A ...
- Linux命令之rm
rm命令 用处:删除文件 用法:在终端上输入rm加上要删除的文件的名字(如果有的话,包括后缀) 示例: (我要删除newfile这个文件)
- H5静态资源本地化实践
现在很多app都是通过webview内嵌H5的页面,这种方式的好处就是无需发版就能更新线上的内容,而且可以做到多平台的统一开发,节约开发成本.但是这种模式也带来了一定的问题,web开发很大程度依赖于网 ...
- 大量界面刷新时手动Dispose也是有必要的
在winform窗体上拖一个flowLayoutPane,一个Button,项目中再创建一个用户控件UcControl,用户控件上放几十个子控件 private void button1_Click( ...
- DotNetBar 控件设置空内容时显示内容
可以通过修改所有关于Watermark时的设置.
- PHP 将amr音频文件转换为mp3格式
说下整体思路 1.服务器安装ffmpeg 2.使用ffmpeg -i 指令来转换amr为mp3格式(这个到时候写在PHP代码中,使用exec函数执行即可) 3.在网页端使用HTML5的audio标签来 ...