python中线程和进程的简单了解

 

一、操作系统、应用程序

  1.硬件:硬盘、cpu、主板、显卡........

  2.装系统(本身也是一个软件):

    系统就是一个由程序员写出来的软件,该软件用于控制计算机得硬盘,让他们之间进行互相配合。

  3.安装软件:各种应用程序

二、并发和并行

  并发:伪,由于执行速度特别快,人感觉不到停顿

  并行:真,创建多个对象同时操作

三、线程、进程

  1.单进程、单线程的应用程序

    print("asd")

  2.到底什么是线程、进程

    python中没有这两个,是python调用的操作系统的线程和进程

  3.单进程、多线程的应用程序

import threading    #两个进程
print("start")
def func(arg):
print(arg)
t = threading.Thread(target=func,args=("......",))
t.start()
print("end")
# start
# ......
# end
 
import threading
class MyThread(threading.Thread):
def run(self):
print(11111,self._args,self._kwargs) #********
t1 = MyThread(args=(11,))
t1.start()
print("end")
# 11111 (11,) {}
# end

python多线程情况下:

  计算密集型操作:效率低(GIL锁)

  IO操作:效率高

python多进程的情况下:

  计算密集型:效率高(浪费资源)

  IO操作:效率高(浪费资源)

在使用时:

  IO密集型用多线程:文件、输入、输出、socket网络通信

  计算密集型用多进程

四、python中线程和进程(GIL锁)

  GIL锁,全局解释器锁,用于限制一个进程中同一时刻只有一个线程被cpu调度。

  扩展:默认GIL锁在执行100个cup指令(过期时间)

setDaemon(True) 若为Ture 则会直接运行主线程,不用等待
 import  threading
import time
def func(a):
time.sleep(2) print(a)
s1=threading.Thread(target=func,args=(1,))
s1.setDaemon(True)
s1.start()
s2=threading.Thread(target=func,args=(2,))
s2.setDaemon(False)#只要两个
s2.start()

join的使用

 join是限制主线程等待子线程的时间,等够了就不再等子线程执行结束,主线程接着执行,没等够主线程就会停下等待,并不是时间到了程序停止的意思 
 import time#让主线程等待
import threading
def func(a):
time.sleep(2)
print(a)
print("创建t1")
t1=threading.Thread(target=func,args=(1,)) t1.start()
t1.join(1)
print("创建t2")
t2=threading.Thread(target=func,args=(2,)) t2.start()
t2.join(1)
print(123)

获取名字

 import threading#或取名字
def func(arg):
t=threading.current_thread()#创建对象
name=t.getName()#直接查找名字哦
print(name,arg)
t1=threading.Thread(target=func,args=(1,))
t1.setName("张庆")
t1.start()
print(123)

加锁:

 import  threading
import time
lock = threading.RLock() n = 10 def task(i):
print('这段代码不加锁',i) lock.acquire() # 加锁,此区域的代码同一时刻只能有一个线程执行
#这题区域分为加锁前和后 先按顺序执行加锁前面的代码,一旦发现加锁
#就直接执行这一个线程的代码>>>执行prient
#执行后执行加锁后面的代码,需要解锁 才可以实现
#解锁后也是根据这一课一线程的代码一步一步解锁
#
global n
print('当前线程',i,'读取到的n值为:',n)
n = i
time.sleep(1)
print('当前线程',i,'修改n值为:',n)
lock.release(), for i in range(10):
t = threading.Thread(target=task,args=(i,))
t.start()

python中线程和进程的简单了解的更多相关文章

  1. 操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁

    并发编程前言: 1.网络应用 1)爬虫 直接应用并发编程: 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2.运维领域 1)自动 ...

  2. Python 中线程和进程

    目录 线程和进程 一. 什么是进程 / 线程 1. 引论 2. 线程 3. 进程 4. 区别 5. 使用 二. 多线程使用 1. 常用方法 2. 常用参数 3. 多线程的应用 3.1 重写线程法 3. ...

  3. python中线程和进程(一)

    目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...

  4. python中线程和进程(二)

    目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...

  5. python中线程、进程和协程的区别

    进程是资源分配的单位 线程是操作系统调度的单位 协程,又称微线程,纤程,协程的切换只是单纯的操作CPU的上下文,资源很小,效率高 进程切换需要的资源很最大,效率很低 一个程序至少有一个进程,一个进程至 ...

  6. Python之线程、进程和协程

    python之线程.进程和协程 目录: 引言 一.线程 1.1 普通的多线程 1.2 自定义线程类 1.3 线程锁 1.3.1 未使用锁 1.3.2 普通锁Lock和RLock 1.3.3 信号量(S ...

  7. Python之线程与进程

    今天我们来了解一下Python的线程和进程的管理机制 首先,我们要了解下线程跟进程的概念: 线程(Thread)是操作系统能够进行运算调度的最小的单位,是一堆cpu的指令.他被包含在进程中,是进程中的 ...

  8. Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁

    本节内容: 进程与线程区别 线程 a)  语法 b)  join c)  线程锁之Lock\Rlock\信号量 d)  将线程变为守护进程 e)  Event事件 f)   queue队列 g)  生 ...

  9. Python菜鸟之路:Python基础-线程、进程、协程

    上节内容,简单的介绍了线程和进程,并且介绍了Python中的GIL机制.本节详细介绍线程.进程以及协程的概念及实现. 线程 基本使用 方法1: 创建一个threading.Thread对象,在它的初始 ...

随机推荐

  1. [C13] 应用实例:图片文字识别(Application Example: Photo OCR)

    应用实例:图片文字识别(Application Example: Photo OCR) 问题描述和流程图(Problem Description and Pipeline) 图像文字识别应用所作的事是 ...

  2. [C6] Andrew Ng - Convolutional Neural Networks

    About this Course This course will teach you how to build convolutional neural networks and apply it ...

  3. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  4. json数据转换成结构体

    package main import ( "encoding/json" "fmt" ) type IT1 struct { Company string ` ...

  5. 【2019.8.11下午 慈溪模拟赛 T2】数数(gcd)(分块+枚举因数)

    莫比乌斯反演 考虑先推式子: \[\sum_{i=l}^r[gcd(a_i,G)=1]\] \[\sum_{i=l}^r\sum_{p|a_i,p|G}\mu(p)\] \[\sum_{p|G}\mu ...

  6. Win10中SVN图标不显示的解决

    团队协作开发,SVN是离不开的.在Win10安装的版本是TortoiseSVN-1.9.5.27581,可检出后图标未显示出来.解决方法是修改注册表: 第一步,打开注册表编辑器位置:HKEY_LOCA ...

  7. 第04组 Alpha冲刺(6/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 协调了一下组内的工作 复习了一下SuffixAutomata 接下来的计划 实现更多的功能 ...

  8. Java连载8-基本数据类型2

    一.基本数据类型 1.字符串“abc”不属于基本数据类型,属于引用数据类型 2. 基本数据类型   占用空间大小(单位:字节) byte                1 short          ...

  9. OpenGL入门1.3:着色器 GLSL

    前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一 ...

  10. 2019-11-26-C#-判断方法是否被子类重写

    原文:2019-11-26-C#-判断方法是否被子类重写 title author date CreateTime categories C# 判断方法是否被子类重写 lindexi 2019-11- ...