美文网首页Java 杂谈程序员
云妹解读:Python网络编程(进程通信、信号、线程锁、多线程)

云妹解读:Python网络编程(进程通信、信号、线程锁、多线程)

作者: 阿里云技术 | 来源:发表于2018-08-20 14:01 被阅读85次

什么是进程通讯的信号?

用过Windows的我们都知道,当我们无法正常结束一个程序时,

可以用任务管理器强制结束这个进程,但这其实是怎么实现的呢?

同样的功能在Linux上是通过生成信号和捕获信号来实现的,

运行中的进程捕获到这个信号然后作出一定的操作并最终被终止。

信号是UNIX和Linux系统响应某些条件而产生的一个事件,

接收到该信号的进程会相应地采取一些行动。通常信号是由一个错误产生的。

但它们还可以作为进程间通信或修改行为的一种方式,

明确地由一个进程发送给另一个进程。一个信号的产生叫生成,接收到一个信号叫捕获

什么是线程锁?

1.在单一进程的情况下可以叫单进程也可以叫单线程

2.线程锁的大致思想是:如果线程A和线程B会执行实例的两个函数a和b

如果A必须在B之前运行,那么可以在B进入b函数时让B进入wait

set,直到A执行完a函数再把B从wait set中激活。这样就保证了B必定在A之后运行,无论在之前它们的时间先后顺序是怎样的。 3. 线程锁用于必须以固定顺序执行的多个线程的调度

线程锁的思想是先锁定后序线程,然后让线序线程完成任务再解除对后序线程的锁定。

信号:

一个进程通过信号的方式传递某种讯息

接收方收到信号后作出相应的处理

kill -sig pid:通过pid发送信号杀死指定进程

kill -l查看操作系统内所所有sig信号

关于信号:

信号名称: 系统定义,名字或数字

信号含义:系统定义,信号的作用

默认处理方法:

当一个进程接收到信号时默认产生的效果

进程终止暂停进程、忽略法发生

SIGHUP: 断开链接

SIGINT: Ctrl + c

SIGQUIT: Ctrl +

SIGTSTP : Ctrl + z

SIGKILL: 终止进程且不能被处理

SIGSTOP: 暂停进程且不能被处理

SIGALRM: 时钟信号

SIGCHLD: 子进程改变状态时父进程会收到此信号

Python信号处理:(signal模块)

os.kill(pid,sig)

功能:

发送一个信号给某个进程

参数:

pid:给那个进程发送信号(进程pid)

sig:要发送的信号类型

signal.alarm(sec)

功能:

异步执行

设置时钟信号

一定时间后给自己发送一个SIGALRM信号

一个进程只能挂起一个时钟

重新挂起时钟会覆盖之前时钟

参数:

sec:时间(秒)

signal.pause()

功能:

阻塞进程,等待一个信号

signal.signal(sig,handler)

功能:信号处理

参数:

sig:要处理的信号

handler:信号处理方法

可选值:

SIG_DFL 表示使用默认方法处理

SIG_IGN 表示忽略这个信号

func 自定义函数

自定义函数格式:

def func(sig,frame):

sig:收到的信号

frame:信号结构对象

signal函数一个异步处理函数,只要执行了该函数

则进程任意时候接受到相应的信号都会处理

signal不能处理SIGKILL 、SIGSTOP

父进程中可以使用 signal(SIGCHLD,SIG_IGN

子进程退出交给系统处理

程序的异步和同步执行:

单进程的同步异步

同步:

程序按照步骤一步步执行,呈现一个先后性的顺序

异步:

信号是唯一一个内部通信方式

程序在执行中利用内核功帮助完成必要的辅助操作

不影响应用层的持续执行

信号是一种异步的进程间通讯方法

示例:

信号量:

给定一定的数量,对多个进程可见,

并且多个进程根据信号量的多少确定不同行为

sem = Semaphore(num)

功能:创建信号量

参数:信号量初始值

返回值:信号量对象

sem.acquire()

将信号数量减1 当数量为0时阻塞

sem.release()

将信号量加1

sem.get_value()

获取当前信号量的值(数量

同步互斥机制

目的:

解决共有资源产生的资源争夺

临界资源:

多个进程或线程都可以操作的资源

临界区

操作临界资源的代码段

同步:

同步一种合作关系,为完成某个任务,

进程或者多个线程之间形成的一种协调

按照约定执行,相互告知,共同完成任务

互斥:

互斥一种制约关系,当一个进程或者线程

进入临界区操作资源时采用上锁的方式,

阻止其他进程操作,直到解锁后才能让出资源

Event事件:

from multiprocessing import Event

创建事件对象

e = Event()

事件阻塞

e.wait([timeout])

功能:

使进程处于阻塞状态,直到事件对象被set

事件设置

e.set.()

功能:

让事件对象变为被设置状态

清除设置:

e.clear()

功能:使事件对象清除设置状态

事件判断:

e.is_set()

判断当前事件是否被set

示例:

锁 Look

multiprocessing --> Look

创建对象:

Lock = Lock()

lock.acquire() 上锁

lock.release() 解锁

如果一个锁对象已经被上锁调用会阻塞

multiprocessing 创建的子进程不能用input 会报错

示例:

多线程:

什么是线程(thread

线程也是一种多任务编程方式,可以使用计算机的多核资源

线程被称为轻量级的进程

线程的特征:

1.一个进程可以包含多个线程

2.线程是计算机内核使用的最小单位

3.线程也是一个运行过程,也要消耗计算机资源

4.多个线程共享共用进程的资源

5.线程也有自己特征属性TID指令集线程栈

6.多个线程之间独立运行互不干扰 空间不独立(都消耗进程空间)

7.线程的创建删除消耗的资源小于进程 线程/进程(1/20

threading 模块

threshold.Thread()

功能:

创建线程对象

参数:

target 线程函数

name 线程名 默认为Thread-1...

args 元组给线程函数位置传参

kwargs 字典给线程函数键值传参

返回值:

线程对象

t.start() 启动线程

t.join() 回收线程

线程对象属性:

t.name 线程名

t.setName() 设置线程名称

t.is_alive()查看线程状态

threading.currentThread() 获取当前进程对象

t.daemon属性

默认False主线程的退出不会影响分支线程的执行

设置为True时主线程退出分支线程也退出

设置daemon值

t.setDaemon(True)

t.daemon = True

查看daemon值

t.isDaemon

创建自己的线程类;

1.继承Thread

2.加载父类__init__

3.重写run

示例:

本文来自阿里云云栖社区,未经允许不得转载。

了解更多

关注简书账号:阿里云科技快讯 并私信小编接口暗号“Hello World”,云栖大会300份干货PPT属于你!

相关文章

  • 云妹解读:Python网络编程(进程通信、信号、线程锁、多线程)

    什么是进程通讯的信号? 用过Windows的我们都知道,当我们无法正常结束一个程序时, 可以用任务管理器强制结束这...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • Python 并发编程简介

    1 多线程和多进程 Python语言中既有多线程编程也有多进程编程,也叫做并发编程。 多进程 把一个程序分成几个不...

  • GCD练习

    GCD练习 ios 多线程 GCD : ios 多线程 全剧队列,异步执行 线程间通信 信号量 文件锁 单利模式 ...

  • Java多线程(2)

    Java多线程(2) 线程间的通信 线程间的通信又称为进程内通信,多个线程实现互斥访问共享资源时会互相发送信号或等...

  • Gevent高并发网络库精解

    进程 线程 协程 异步 并发编程(不是并行)目前有四种方式:多进程、多线程、协程和异步。 多进程编程在python...

  • Python多线程

    目录:一、线程的创建二、多线程互斥锁三、线程间通信四、线程池 Python并发之多线程 一、线程的创建 单线程示例...

  • zookeeperDistributedLock

    分布式锁: 分布式锁是什么? 通常说的锁是单进程多线程的锁,在多线程并发编程中用于线程之间的数据共享 分布式锁 指...

  • 【Java 基础你一定要掌握的知识点】多线程

    Java 给多线程编程提供了内置的支持。在多线程编程之前,我们需要先了解什么是线程。 进程和多线程简介 进程:进程...

网友评论

    本文标题:云妹解读:Python网络编程(进程通信、信号、线程锁、多线程)

    本文链接:https://www.haomeiwen.com/subject/affliftx.html