day37-多进程多线程二-锁
Lock组件
当我们用多进程来读写文件的时候,如果一个进程是写文件,一个进程是读文件,如果两个文件同时进行,肯定是不行的,必须是文件写结束以后,才可以进行读操作。或者是多个进程在共享一些资源的时候,同时只能有一个进程进行访问,那就要有一个锁机制进行控制。
acquire()
locked()
release() //释放锁,使用前线程必须已获得锁定,否则抛出异常
lock=thread.allocate_lock():生成锁对象
lock.acquire():加锁
线程使用锁对象
lock.release(): 线程调度释放锁
查看locked()状态
获得一把锁,把对放的锁释放
threading 高级别多线程模块
threading 不需要进程的控制来控制线程
threading.Thread: 类
成员方法:
start() 启动
run() 重写
join() 阻塞
getName()
setName()
isDaemon() 判断线程是否随主线程一起结束
setDaemon() 设置线程与主线程一起结束
共享内存
python的multiprocessing模块也给我们提供了共享内存的操作
一般的变量在进程之间是没法进行通讯的,multiprocessing给我们提供了Value和Array模块,他们可以在不通的进程中共同使用
例子:
import multiprocessing #lock = multiprocessing.Lock()
#lock.acquire() 获取锁
#lock.release() 释放锁
#with lock: 加锁 import time # Value()
# Array()
def add(number,add_value,lock):
lock.acquire()
try:
print("init add{0} number = {1}".format(add_value,number.value))
for i in xrange(1,6):
number.value += add_value
print("############add{0} has added#######".format(add_value))
time.sleep(1)
print("add{0} number = {1}".format(add_value,number.value))
except Exception as e:
raise e
finally:
lock.release()
def change(arr):
for i in range(len(arr)):
arr[i] = -arr[i] if __name__ == "__main__":
lock = multiprocessing.Lock() #加锁
number = multiprocessing.Value('i',0) #共享内存
arr = multiprocessing.Array('i',range(10)) #共享内存数组
print(arr[:])
p1 = multiprocessing.Process(target=add,args=(number,1,lock))
p2 = multiprocessing.Process(target=add, args=(number, 3,lock))
p3 = multiprocessing.Process(target=change, args=(arr,))
p1.start()
#p1.join()
p2.start()
##p2.join()
p3.start() #启动
p3.join()
print(arr[:])
print("main end") 输出结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
init add1 number = 0
############add1 has added#######
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
main end
add1 number = 1
############add1 has added#######
add1 number = 2
############add1 has added#######
add1 number = 3
############add1 has added#######
add1 number = 4
############add1 has added#######
add1 number = 5
init add3 number = 5
############add3 has added#######
add3 number = 8
############add3 has added#######
add3 number = 11
############add3 has added#######
add3 number = 14
############add3 has added#######
add3 number = 17
############add3 has added#######
add3 number = 20
day37-多进程多线程二-锁的更多相关文章
- java多线程(二)——锁机制synchronized(同步方法)
synchronized Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码.当两个并发线程访问同一个对象object中 ...
- Python 多线程、多进程 (二)之 多线程、同步、通信
Python 多线程.多进程 (一)之 源码执行流程.GIL Python 多线程.多进程 (二)之 多线程.同步.通信 Python 多线程.多进程 (三)之 线程进程对比.多线程 一.python ...
- Java 多线程:锁(二)
Java 多线程:锁(二) 作者:Grey 原文地址: 博客园:Java 多线程:锁(二) CSDN:Java 多线程:锁(二) AtomicLong VS LongAddr VS Synchroni ...
- Python 多进程 多线程 协程 I/O多路复用
引言 在学习Python多进程.多线程之前,先脑补一下如下场景: 说有这么一道题:小红烧水需要10分钟,拖地需要5分钟,洗菜需要5分钟,如果一样一样去干,就是简单的加法,全部做完,需要20分钟:但是, ...
- python多进程(二)
之前实现的数据共享的方式只有两种结构Value和Array.Python中提供了强大的Manager专门用来做数据共享的,Manager是进程间数据共享的高级接口. Manager()返回的manag ...
- python爬虫入门八:多进程/多线程
什么是多线程/多进程 引用虫师的解释: 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期. 进程(有时被称为重量级进程)是 ...
- gdb常用命令及使用gdb调试多进程多线程程序
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...
- python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!
首先我们来了解下python中的进程,线程以及协程! 从计算机硬件角度: 计算机的核心是CPU,承担了所有的计算任务.一个CPU,在一个时间切片里只能运行一个程序. 从操作系统的角度: 进程和线程,都 ...
- 也说性能测试,顺便说python的多进程+多线程、协程
最近需要一个web系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...
随机推荐
- Centos7.2 Install subversion server
l 安装svn yum install subversion l 查看svn版本 svnserve --version l 创建svn版本库目录 mkdir -p /projects/ ...
- 基于ABP模块组件与依赖注入组件的项目插件开发
注意,阅读本文,需要先阅读以下两篇文章,并且对依赖注入有一定的基础. 模块系统:http://www.cnblogs.com/mienreal/p/4537522.html 依赖注入:http://w ...
- Docker Registry V2 with Nginx
安装 nginx 修改/etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/cen ...
- pyCharm的第一个项目
首先打开编译器pyCharm 创建一个项目 在location :新建文件夹 在interpreter:指定python解释器的路径 python解释器下载官网: https://www.python ...
- 9个顶级开发IoT项目的开源物联网平台
https://blog.csdn.net/shnbiot/article/details/80432017 物联网(IoT)是帮助人工智能(AI)以更好的方式控制和理解事物的未来技术. 我们收集了一 ...
- BIOS备忘录之ASL code常用知识点
_HID:device唯一 _STA:决定device在不在(在DM下面能不能看到) _CRS:描述分配给device的资源 _INI:在OSPM加载描述表的时候运行一次(比如,如果要根据不同情况给d ...
- JS(JavaScript)的初了解3(更新中···)
1. {} 在JS中我们把它叫代码块.如果代码块里的内容没有执行完,语句不会向下执行. 代码块是一个独立的整体.如果JS中某一条语句出错,那么就会在此终止不会向下执行. 2. 循环语句 循环,就是对一 ...
- Python3 tkinter基础 Menu add_radiobutton 单选的下拉菜单
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- linux基础之sed
sed: Stream EDitor,行编辑器 用法: sed [option]... 'script' inputfile... script: '地址命令' 常用选项: -n: 不输出模式中的内容 ...
- 论文笔记:Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries
Dynamic Multimodal Instance Segmentation Guided by Natural Language Queries 2018-09-18 09:58:50 Pape ...