python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)
9.9 线程理论
1、什么是线程 线程指的是一条流水线的工作过程
进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位
2、进程VS线程
同一进程内的线程们共享该进程内资源,不同进程内的线程资源肯定是隔离的
创建线程的开销比创建进程要小的多
9.91 开启线程的两种方式
方式一:
from multiprocessing import Process
from threading import Thread
import time
def task(name):
print('%s is running' %name)
time.sleep(3)#主线程运行结束,要等子线程结束,因为子线程还要使用主线程的资源
if __name__ == '__main__':
t=Thread(target=task,args=('egon',))
# t=Process(target=task,args=('egon',))
t.start()
print('主线程')#egon is running 主线程
方式二:
from multiprocessing import Process
from threading import Thread
import time
class MyThread(Thread):
def run(self):
print('%s is running' %self.name)
time.sleep(3)
if __name__ == '__main__':
t=MyThread()
t.start()
print('主线程')#Thread-1 is running 主线程
9.92 进程与线程的区别
1、PID:
from threading import Thread
import time,os
def task():
print('%s is running' %os.getpid())#11352 is running
time.sleep(3)
if __name__ == '__main__':
t=Thread(target=task,)
t.start()
print('主线程',os.getpid())#主线程 11352
2、线程创建开销小
3、同一进程内的多个线程共享该进程内的资源
from threading import Thread
import time,os
x=1000
def task():
global x
x=0
if __name__ == '__main__':
t=Thread(target=task,)
t.start()
t.join()
print('主线程',x) #主线程 0
9.93 线程对象的其他方法
is_alive(): 返回线程是否活动的
getName(): 返回线程名
setName(): 设置线程名
enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
active_count(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
current_thread(): 返回当前的线程变量
from threading import Thread,current_thread,active_count,enumerate
import time,os
def task():
print('%s is running' %current_thread().name)
time.sleep(3)
if __name__ == '__main__':
t1=Thread(target=task,name='第一个线程')#第一个线程 is running
t2=Thread(target=task,)#Thread-1 is running
t3=Thread(target=task,)#Thread-2 is running
t1.start()
t2.start()
t3.start()
print(t1.is_alive())#True
print(active_count())#
print(enumerate())#[<_MainThread(MainThread, started 13004)>, <Thread(第一个线程, started 14044)>, <Thread(Thread-1, started 11380)>, <Thread(Thread-2, started 9452)>]
print('主线程',current_thread().name)#主线程 MainThread
python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)的更多相关文章
- python 之 并发编程(开启子进程的两种方式,进程对象的属性)
第九章并发编程 同一个程序执行多次是多个进程 import time import os print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...
- 并发编程 - 进程 - 1.开启子进程的两种方式/2.查看pid/3.Process对象的其他属性或方法/4.守护进程
1.开启子进程的两种方式: # 方式1: from multiprocessing import Process import time def task(name): print('%s is ru ...
- DJango中开启事务的两种方式
目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...
- Java并发编程:Java实现多线程的几种方式
在Java中,多线程主要的实现方式有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService ...
- 线程池提交任务的两种方式:execute与submit的区别
Java中的线程池在进行任务提交时,有两种方式:execute和submit方法. 一.execute和submit的区别 execute只能提交Runnable类型的任务,无返回值.submit既可 ...
- 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性
一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...
- 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用
当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...
- PythonDay02——编程语言、python介绍以及安装解释器、运行程序的两种方式、变量
一.编程语言 1.1 机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2 汇编语言:用英文标签取代二进制指令去编写程序,本质也是直接控制硬件 1.3 高级语言:用人能理解的表达方式 ...
- Process 开启子进程 的两种方式、join控制子进程、守护进程
一.join控制子进程的一种方式 当主进程需要在子进程结束之后结束时,我们需要用到join来控制子进程. import time import random from multiprocessing ...
- 转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/ ...
随机推荐
- 有效地查找SAP增强点
找SAP增强点一直都是SAP开发的重点难点,增强开发的代码一般不会很多,但是需要花费比较多的时间在查找增强点上 网上也流传了很多查找SAP增强的方法: 1.利用TCODE寻找增强 2.利用系统函数寻找 ...
- ABAP中SPLIT关键字 当分隔符位于字符串首尾时
使用SPLIT关键字将一个字符串按某个分隔符拆分,如果分隔符穿插在字符串中间(即首尾字符均不是分隔符的情况),我们很容易知道拆分后的结果,但如果分隔符恰好位于字符串首或者末尾呢? 如下面的代码所示,在 ...
- bootstrap模态框篇【遇到的问题】
<div class="modal fade" tabindex="-1" role="dialog"> <div cl ...
- Kafka笔记7
Kafka提供了一些命令行工具,用于管理集群变更.这些工具使用Java实现,Kafka提供了一些脚本调用这些Java类. 9.1主题操作 使用Kafka-topics.sh工具可以执行主题大部分工作, ...
- 前端视频转码flv->swf
在项目中本来是要用<video>标签插入视频,但此标签不支持flv格式,上网也是搜了很多,试了很久才成功(其他格式不是很清楚你们可以尝试看看) 所用技术 flach (Flvplayer. ...
- pomelo使用中的常见问题
1.端口被占用, 有进程没杀干净. 用 pomelo kill --force 命令清一下进程.
- 深入理解Java的浅克隆与深克隆
前言 克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个对象,并对相应的属性进行数据,这样也能实现克隆的目的. 但当对象属性 ...
- BDC
TC:SHDB 复制到应用处并更改参数. 附上部分代码 * Batchinputdata of single transaction DATA: bdcdata LIKE bdcdat ...
- vue.js执行mounted的实例
代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" c ...
- Windows下OSGEarth的编译过程
目录 1. 依赖 1) OpenSceneGraph 2) GDAL 3) CURL 4) GEOS 5) 其他 2. 编译 1) 设置参数 2) 配置路径 3) 生成编译 3. 参考文献 1. 依赖 ...