进程(process):相当于一个程序要运行时所需的所有资源的集合,相当于一个车间,不工作

两个进程之间的数据不共享,完全不独立,互相不能访问。

线程(thread):一道单一指令的控制流,寄生在进程中,相当于车间中的工人,工作。一个进程至少需要一个线程,这个线程为主线程,一个进程中可以有多个线程。

cpu的核数越多,代表可以并发的线程越多

一个进程中的不同线程共享数据,多线程在修改同一个数据时,一定要加锁

___线程___

  1、threading模块

       声明一个线程t=threading.Thread(target=线程函数名,args=(参数,))

    启动一个线程:t.start()

 import threading
def func1(n):
print('thread:%s'%n)
t=threading.Thread(target=func1,args=(i,))
t.start()

   2、实现多线程并发

           即同时启动多个线程,并发运行

import threading
import time
def func1(n):
time.sleep(8) #为了更直观的感受到并发效果~~
print('thread:%s'%n)
for i in range(30): #同时启动30个线程,并发
t=threading.Thread(target=func1,args=(i,))
t.start()

   3、线程的其他小方法

t.getName():取线程名 ,该名称是唯一的

t.setName('sefjsjfisojgiod') :设置线程名字,如果不设置,系统会自动起名

threading.active_count() :当前活跃的线程数

threading.current_thread():当前运行的线程实例

 import threading
import time
def run(n):
time.sleep(3)
print('thread',n)
print(threading.current_thread()) #打印当前运行的线程的实例
for i in range(10):
t=threading.Thread(target=run,args=(i,))
t.start()
t.setName('kasjdjakldjalsjdlasjdlsd%s'%i) #修改线程的名字,默认是Thread-i
print(t.getName()) #获取线程名,线程名是唯一的
print(threading.active_count()) #统计活跃的线程数

  4、线程等待

前面程序运行的时候,都是主线程启动和子线程之后,和子线程一起运行,那么如何实现主线程启动了子线程之后先不运行,等待子线程运行完毕之后(比如有些场景需要主线程拿到子线程的结果)再运行呢?????

线程等待:t.join()

 import threading
import time def run(n):
time.sleep(1)
print('thread',n)
t_list=[]
for i in range(10):
t=threading.Thread(target=run,args=(i,))
t.start()
t_list.append(t) #将启动的线程加入到有个列表中
for t in t_list:
t.join() # 等待所有线程运行完毕
print('))))))))))))))))))))))))))))))))))))))))')

注意:如果将t.join()加载t.start()之后,那么就不是并行运行了,变成了串行

  5、守护线程

前面主线程执行完毕,未执行的子线程仍继续执行,并不受主线程的影响,有些场景主线程完毕之后,子线程变没有意义了,那么如何让主线程执行完毕之后,子线程也停止执行,程序退出呢???

    场景举例:ftpserver为主线程,一个子线程的功能是断开很久没有活跃的连接,比如半小时这个连接没有活动,就将该链接断开。该子线程是一个独立的线程,如果主线程已经退出了,那么该子线程也没有存在的意义了。    怎么实现该子线程在主线程断开之后也停止运行呢????        将该子线程设置为主线程的守护线程就可以啦~~~

   t.setDaemon()

 import threading
import time
def run(n):
time.sleep(1)
print('thread:%s'%n)
for i in range(10):
t=threading.Thread(target=run,args=(1,))
t.setDaemon(True) # 启动线程之前,将线程设置为守护进程,则主线程结束后,子线程也结束,不会继续执行
t.start() print('hahhhahahahaha')

python-进程&线程的更多相关文章

  1. python/进程线程的总结

    python/进程线程的总结 一.进程和线程的描述: 进程:最小的资源管理单位 线程:最小的执行单位 执行一个进程时就默认执行一个线程(主线程) 进程和线程的工作方式: 串行: 假如共有A.B.C任务 ...

  2. Python 进程线程协程 GIL 闭包 与高阶函数(五)

    Python 进程线程协程 GIL 闭包 与高阶函数(五) 1 GIL线程全局锁 ​ 线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的 ...

  3. python 进程 线程

    进程 线程 操作系统 为什么要有操作系统? 操作系统:操作系统是一个用来协调,管理和控制计算机硬件和软件资源的系统程序.位于底层硬件与应用软件之间 工作方式:向下管理硬件 向上提供接口 切换 1.出现 ...

  4. Python 进程 线程总结

    操作系统的底层是 进程 线程 实现的 进程 操作系统完成系统进程的切换,中间有状态的保存.进程有自己独立的空间,进程多,资源消耗大 进程是最小的资源管理单位 可以理解为盛放线程的容器 线程 线程是最小 ...

  5. python进程.线程和协程的总结

    I.进程: II.多线程threading总结 threading用于提供线程相关的操作,线程是应用系统中工作的最小单位(cpu调用的最小单位). Python当前版本的多线程没有实现优先级,线程组, ...

  6. python -- 进程线程协程专题

    进程专栏 multiprocessing 高级模块 要让Python程序实现多进程(multiprocessing),我们先了解操作系统的相关知识. Unix/Linux操作系统提供了一个fork() ...

  7. python 进程 线程 协程

    并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...

  8. python进程/线程/协程

    一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...

  9. python 进程/线程/协程 测试

    # Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/5/24 21:38 # 进程:如一个人拥有分身(分数数最好为cpu核心数)几乎同时 ...

  10. python学习笔记-进程线程

    1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...

随机推荐

  1. C# 复制PDF页面到另一个PDF文档

    C# 复制PDF页面到另一个PDF文档 有时候我们可能有这样一个需求,那就是把PDF页面从一个PDF文档复制到另一个PDF文档中.由于PDF文档并不像word文档那样好编辑,因此复制也相对没有那么容易 ...

  2. php登录注册页面及加载

                           php注册界面                               <h1>注册页面</h1> <form acti ...

  3. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

  4. 不到一百行实现一个小siri

    想要容易理解核心的特征计算的话建议先去看看我之前的听歌识曲的文章,传送门:http://www.cnblogs.com/chuxiuhong/p/6063602.html 本文主要是实现了一个简单的命 ...

  5. [WinForm] DataGridView 绑定 DT && ComboBox 列绑定 Dict

    一  需求介绍 一般像枚举类型的数据,我们在数据库里存储着诸如(1.2.3.4-)或者("001"."002"."003"-)此类,但是界面 ...

  6. 02 button的练习

    private void button1_Click(object sender, EventArgs e) { MessageBox.Show("我也喜欢你!"); //if ( ...

  7. WPF弹出带蒙板的消息框

    效果图 思路 拿到父级窗体的内容,放入一个容器里,再在容器里放入一个半透明层.将整个容器赋给父级窗体的内容. 关闭时反向操作. 代码 消息窗弹出时 /// <summary> /// 弹出 ...

  8. 保持Qt GUI响应的几种方法

    最开始使用Qt时就遇到过QT Gui失去响应的问题,我是用多线程的方式解决的,然而通常来说,多线程是会降低程序的运行速度. 之后,在使用QSqlQuery::execBatch()函数时,Qt Gui ...

  9. sea.js详解

    Seajs相关知识 seajs.Use 引入入口文件 第一个参数表示模块id 字符串表示一个模块id 数组,数组每个成员表示一个模块 第二个参数表示回调函数(可有可无的) 作用就是当模块加载完成执行回 ...

  10. webpack+react+antd 单页面应用实例

    React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React.React入门最好的实例-TodoList 自己从开始 ...