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 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)的更多相关文章

  1. python 之 并发编程(开启子进程的两种方式,进程对象的属性)

    第九章并发编程 同一个程序执行多次是多个进程 import time import os ​ print('爹是:',os.getppid()) #父进程PID,(pycharm) print('me ...

  2. 并发编程 - 进程 - 1.开启子进程的两种方式/2.查看pid/3.Process对象的其他属性或方法/4.守护进程

    1.开启子进程的两种方式: # 方式1: from multiprocessing import Process import time def task(name): print('%s is ru ...

  3. DJango中开启事务的两种方式

    目录 Django中开启事务的两种方式 第一种 第二种 Django中开启事务的两种方式 第一种 from django.db import transaction with transaction. ...

  4. Java并发编程:Java实现多线程的几种方式

    在Java中,多线程主要的实现方式有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService ...

  5. 线程池提交任务的两种方式:execute与submit的区别

    Java中的线程池在进行任务提交时,有两种方式:execute和submit方法. 一.execute和submit的区别 execute只能提交Runnable类型的任务,无返回值.submit既可 ...

  6. 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性

    一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...

  7. 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用

    当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...

  8. PythonDay02——编程语言、python介绍以及安装解释器、运行程序的两种方式、变量

    一.编程语言 1.1 机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2 汇编语言:用英文标签取代二进制指令去编写程序,本质也是直接控制硬件 1.3 高级语言:用人能理解的表达方式 ...

  9. Process 开启子进程 的两种方式、join控制子进程、守护进程

    一.join控制子进程的一种方式 当主进程需要在子进程结束之后结束时,我们需要用到join来控制子进程. import time import random from multiprocessing ...

  10. 转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17290021 在http://blog.csdn.net/ns_code/article/ ...

随机推荐

  1. VS使用的快捷方式

    VS常用快捷键 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪 ...

  2. Hadoop集群(第3期)机器信息分布表

    1.分布式环境搭建 采用4台安装Linux环境的机器来构建一个小规模的分布式集群. 图1 集群的架构 其中有一台机器是Master节点,即名称节点,另外三台是Slaver节点,即数据节点.这四台机器彼 ...

  3. http 报错码对应的错误原因

    转:http://blog.csdn.net/cutbug/article/details/4024818 1xx - 信息提示这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多 ...

  4. shell多线程之进程间通信(2)

    工作中往往遇到这种情况,有许多任务,依次执行比较浪费时间,由于任务之间有依赖关系,简单的并发执行又不行. 就如同下面这种情况,任务new和dvidUser是可以并发执行的,fact任务依赖于new任务 ...

  5. Ubuntu --- Xshell 连接 VirtualBox下安装的Ubuntu

    1.桥接模式 打开VirtualBox管理器---设置---网络---连接方式选择桥接网卡 2.安装ssh服务 安装: sudo apt-get install openssh-server 启动: ...

  6. 每周分享五个 PyCharm 使用技巧(五)

    文章首发于 微信公众号:Python编程时光 大家好,这是本系列 PyCharm 的高效使用技巧的第五篇.按照惯例,本次还是分享 5 个. 本系列前四篇如下,若还没看的,你可以点击查阅 21. 随处折 ...

  7. HBase 学习之路(八)——HBase协处理器

    一.简述 在使用HBase时,如果你的数据量达到了数十亿行或数百万列,此时能否在查询中返回大量数据将受制于网络的带宽,即便网络状况允许,但是客户端的计算处理也未必能够满足要求.在这种情况下,协处理器( ...

  8. Netty源码分析-- 处理客户端接入请求(八)

    这一节我们来一起看下,一个客户端接入进来是什么情况.首先我们根据之前的分析,先启动服务端,然后打一个断点. 这个断点打在哪里呢?就是NioEventLoop上的select方法上. 然后我们启动一个客 ...

  9. JavaScript 基础知识 变量与数据类型

    一.区分大小写 JS中一切(变量/函数名/操作符)都是严格区分大小写的 二.标识符 变量.函数.属性的名字以及函数的参数 命名规则:1.第一个字符可以是字母.下划线.美元符号$ 2.其他的字符可以是字 ...

  10. C++ luogu1352没有上司的舞会 from_树形DP

    luogu1352没有上司的舞会 分析(树形DP模板题): 没学树形DP的,看一下. 把该题抽象到一颗树中,设i的下属就是他的儿子,则有两种情况: 如果i参加,他的儿子就不能参加. 如果i不参加,他的 ...