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系统进行接口性能测试,这里顺便说一下性能测试的步骤吧,大概如下 一.分析接口频率 根据系统的复杂程度,接口的数量有多有少,应该优先对那些频率高,数据库操作频繁的接口进行性能测试,所以 ...
随机推荐
- Android adt-bundle 开发环境的搭建_windows
本文完全拷贝的是: https://www.jb51.net/article/87953.htm 的文章仅仅用于自己保存学习消息. Android开发环境有三种方式,分别是JDK+SDK+Ecli ...
- python核心技术
基本语法 Python的设计目标之一是让代码具备高度的可阅读性.它设计时尽量使用其它语言经常使用的标点符号和英文单字,让代码看起来整洁美观.它不像其他的静态语言如C.Pascal那样需要重复书写声明语 ...
- <转>jmeter(二十三)分布式测试
本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...
- perl 用网易发邮件报错 554 DT:SPM 163 smtp14
查看相关链接,貌似被当成垃圾邮件了,发不出去 554 DT:SPM 163 smtp14,EsCowACHUegmKpdc3giRMQ--.29617S2 1553410599,please see ...
- Linux 查看磁盘使用情况
Linux 查看磁盘使用情况 df 查看当前挂载空间使用情况 语法: df [选项]... [FILE]... 文件-a, --all 包含所有的具有 0 Blocks 的文件系统 文件--block ...
- hbot固件配置
又入了一台打印机,171到手,本来之前有更好的,无奈别人下手太快,只剩这台了. 175x135x180的样子. 创客的板,还带16g的闪迪内存卡,看到那会儿感觉赚大了! 拿到的时候不少螺丝松的,有的打 ...
- Linux下按扇区读写块设备
本文介绍Linux下按扇区读写块设备(示例TF卡),实际应用是在Android系统上,主要方法如下: 1.找到sdcard的挂载点,在android2.1系统下应该为/dev/block/mmcblk ...
- 剑指offer(4)重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- Linux系统组成
1 系统组成 BootLoader:操作系统引导程序 内核: 文件系统:应用程序(用户开发的.网上下载的) 2 安装USB驱动 dongry@d-linux:~$ insmod usb_dnw.ko ...
- 如何设置openwrt在编译linux内核时不优化内核?
答:修改openwrwt源码目录下rule.mk文件中的HOST_CFLAGS即可 将HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)改成: HOST_CFLAGS:=-O1 $(H ...