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. 从Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式(在源码里写非英文,官方推荐“\xE4\xBD...”这种)good

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); QTextCodec::setCodecFo ...

  2. Cocos2d-x 3.X Qt MinGW版本编译运行

    自Cocos2d-x 3.X引入了C++ 11特性,在Windows平台上的支持就仅限VS 2012,其实还可以尝试MinGW版本,GitHub上有MinGW版本的Qt Creator工程. 地址:h ...

  3. Hadoop集群(第2期)虚拟机网卡的介绍和配置

    很多人安装虚拟机的时候,经常遇到不能上网的问题,而vmware有三种网络模式,对初学者来说也比较眼花聊乱,今天我就来基于虚拟机3种网络模式,帮大家普及下虚拟机上网的背景知识 虚拟机网络模式 无论是vm ...

  4. linux dll hell--链接库real name, soname, link name

    DLL hell 是指 Windows 系统上动态库的新版本覆盖旧版本,且新版本不能兼容旧版本的问题. 例如:装新软件,但原有的软件运行不起来了.   Linux 系统下也同样面临着和 Windows ...

  5. java.lang.ClassNotFoundException: org.jaxen.JaxenException 解决方法

    当遇到如下exception时, May 11, 2017 4:23:17 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE ...

  6. python 原理

    Python原理--总结 基础数据类型: ​ 字符串: ​ upper,lower,startwith,endswith,replace,strip,split,count,isdigit,index ...

  7. hive数据倾斜的解决办法

    数据倾斜是进行大数据计算时常见的问题.主要分为map端倾斜和reduce端倾斜,map端倾斜主要是因为输入文件大小不均匀导致,reduce端主要是partition不均匀导致. 在hive中遇到数据倾 ...

  8. 前端视频转码flv->swf

    在项目中本来是要用<video>标签插入视频,但此标签不支持flv格式,上网也是搜了很多,试了很久才成功(其他格式不是很清楚你们可以尝试看看) 所用技术 flach (Flvplayer. ...

  9. 上不了名校?可以在 GitHub 上读他们的课程

    今天开始,全国各大区域的高考成绩陆续公布,又到了几家欢喜几家愁的时刻,如果你准备报考计算机相关专业,但是又由于分数不高而苦恼.别担心,在 GitHub 上有着大量的名校教学资源,即使上不了名校,也可以 ...

  10. pybind11在Windows下的使用

      Pybind11算是目前最方便的Python调用C++的工具了, 介绍一下在vs2019上写Python的扩展的HelloWorld   1. 去下载pybind11 https://github ...