我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3 进程锁

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3 进程锁

多进程抢占资源
当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。

	import os
	import time
	import random
	from multiprocessing import Process,Lock
	
	def work(n):
	    print('%s: %s is runing' % (n,os.getpid()))
	    time.sleep(random.random())
	    print('%s: %s is down' % (n, os.getpid()))
	  
	
	if __name__ == '__main__':
	    for i in range(3): # 利用for循环模拟多进程
	        p=Process(target=work,args=(i,))
	        p.start()
	        
输出结果:
0: 10974 is runing
1: 10975 is runing
2: 10976 is runing
1: 10975 is down
2: 10976 is down
0: 10974 is down

加锁

# 由并发变成了串行,牺牲了运行效率,但避免了竞争
import os
import time
import random
from multiprocessing import Process,Lock

def work(lock,n):
    lock.acquire()
    print('%s: %s is runing' % (n,os.getpid()))
    time.sleep(random.random())
    print('%s: %s is down' % (n, os.getpid()))
    lock.release()

if __name__ == '__main__':
    lock = Lock()
    for i in range(3):
        p=Process(target=work,args=(lock,i))
        p.start()

输出结果:
0: 10986 is runing
0: 10986 is down
1: 10987 is runing
1: 10987 is down
2: 10988 is runing
2: 10988 is down

上面这种情况虽然使用加锁的形式实现了顺序的执行,但是程序又重新变成串行了,这样确实会浪费了时间,却保证了数据的安全。这个过程类似于数据库的事务


例子:模拟抢票

没有加锁的情况,虽然实现了并发,但是数据不安全,本来只有一张票,但是还是会有多个人抢到,这显然不符合现实

# 文件db的内容为:{"count":1}
# 注意一定要用双引号,不然json无法识别
# 并发运行,效率高,但竞争写同一文件,数据写入错乱

from multiprocessing import Process
import time,json,random

def search():
    dic = json.load(open('db'))
    print('\033[43m剩余票数%s\033[0m' % dic['count'])

def get():
    dic = json.load(open('db'))
    time.sleep(0.1)   # 模拟读数据延迟
    if dic['count'] > 0:
        dic['count'] -= 1
        time.sleep(0.2)  # 模拟写数据延迟
        json.dump(dic,open('db','w'))
        print('\033[43m购票成功\033[0m')

def task():
    search()
    get()

if __name__ == '__main__':
    for i in range(100):    # 模拟并发100个客户端抢票
        p=Process(target=task)
        p.start()

加锁

# 文件db的内容为:{"count":5}
# 注意一定要用双引号,不然json无法识别
# 并发运行,效率高,但竞争写同一文件,数据写入错乱

from multiprocessing import Process,Lock
import time,json,random

def search():
    dic=json.load(open('db'))
    print('\033[43m剩余票数:%s\033[0m' % dic['count'])

def get():
    dic=json.load(open('db'))
    time.sleep(random.random()) # 模拟读数据的网络延迟
    if dic['count'] > 0:
        dic['count'] -= 1
        time.sleep(random.random()) # 模拟写数据的网络延迟
        json.dump(dic,open('db','w'))
        print('\033[43m购票成功\033[0m')

    else:
        print('\033[43m余票不足\033[0m')

def task(lock):
    search()
    lock.acquire()
    get()
    lock.release()

if __name__ == '__main__':
    lock=Lock()
    for i in range(100): # 模拟并发100个客户端
        p=Process(target=task,args=(lock,))
        p.start()

输出结果:
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
剩余票数:5
购票成功
购票成功
购票成功
购票成功
购票成功
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足
余票不足

Process finished with exit code 0

因为只有5张票,因此加锁后只会有5个人买到票,保证了数据的安全性。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3 进程锁

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python3 进程锁

多进程抢占资源当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题。import osimport timeimport randomfrom multiprocessing import Process,Lockdef wo
2023-01-31

python3--进程

进程顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的一操作系统的作用:1:
2023-01-30

python3进程和线程

进程基本概念进程是执行中的程序, 也就是说进程是动态的, 程序是静态的进程是操作系统分配资源的最小单位,有一个进程控制块(PCB), 有自己唯一的一个进程标识符(PID)进程之间相互独立, 内存不共享每个进程都是一个实体, 每个进程都有属于
2023-01-31

python3多进程实现

python多进程的主要方式有两种,一种是使用os模块的fork方法,另一种方法是使用multiprocessing模块,这两种方法的就别在于前者仅适用于Unix/Linux操作系统,后者是跨平台的实现方式1.使用fork方法实现- for
2023-01-31

Python进程锁和进程池

进程锁进程与进程之间是独立的,为何需要锁?对于进程,屏幕的输出只有一个,此时就涉及到资源的竞争。在Linux的Python2.x中可能出现问题。这仅仅是一种情况,多个进程之间虽然是独立的,但仅限于内存和运算,如果涉及到其它一些资源,就可能存
2023-01-31

python3--进程同步(multiprocess.Lock, Semaphore, Event)

socket基于tcp协议的多进程聊天(异步)server端代码importsocketfrommultiprocessingimportProcessdefchat(conn):whileTrue:#接收消息,打印消息msg=conn.r
2023-01-30

python3--进程,线程,协程效率对比

需求:写一个脚本,判断192.168.11.0/24网络里,当前在线ip有哪些?知识点:1 使用subprocess模块,来调用系统命令,执行ping 192.168.11.xxx 命令2 调用系统命令执行ping命令的时候,会有返回值(p
2023-01-30

Python3实用编程技巧进阶

var 立即前往 = " http://icourse8.com/Python3_pcjqjj.html ";章节信息第1章 课程简介(本课程基于py3.x并赠送py2.x的讲解) 第2章 数据结构与算法相关问题与解决技巧 第3
2023-01-31

Python进程池与进程锁实例分析

本篇内容主要讲解“Python进程池与进程锁实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python进程池与进程锁实例分析”吧!进程池什么是进程池上一章节关于进程的问题我们提到过,进程
2023-06-29

Python3 异步编程之进程与线程-1

Python3 异步编程之进程与线程-1一、了解进程间通信进程间通信进程线程线程 vs 进程IO模型并发 vs 并行异步 vs 同步二、多线程与多进程的用法计算密集型 vs I/O密集型GIL多线程多进程三、协程的好处与用法协程yieldy
2023-01-31

python3--中的进程操作--multiprocess模块

在python程序中的进程操作运行中的程序就是一个进程。所有的进程都是通过它的父进程来创建的。因此,运行起来的python程序也是一个进程,那么我们也可以在程序中再创建进程。多个进程可以实现并发效果,也就是说,当我们的程序中存在多个进程的时
2023-01-30

用python3的多进程和协程处理MyS

本文介绍用python3的多进程 + 协程处理MySQL的数据,主要逻辑是拉取MySQL的数据,然后使用flashtext匹配关键字,在存回MySQL,代码如下(async_mysql.py):import timeimport async
2023-01-31

Python3 串口两进程同时读写

通过两个进程分别读写串口,并把发送与接收到的内容记录在blog中,收到q时程序结束并退出import threading,timeimport serialimport stringclass SerThread: def __ini
2023-01-31

python3--线程,锁,同步锁,递归锁,信号量,事件,条件和定时器,队列,线程池

线程什么是线程?线程是cpu调度的最小单位进程是资源分配的最小单位进程和线程是什么关系? 线程是在进程中的 一个执行单位 多进程 本质上开启的这个进程里就有一个线程 多线程 单纯的在当前进程中开启了多个线程线程和进程的区别: 线程的开启 销
2023-01-30

python3--函数进阶

例子def func(a,b,c,d,e,f,g): passprint(func(a, b , c, d, e, f, g))如果再加30个参数呢?,在后面继续添加?有没有万能的参数,可以代表一切参数呢?*args 动态参数,万能参数a
2023-01-30

python3.x的改进

Python 3.x 起始版本是Python 3.0,目前的最新版本是 3.3.3Python之父Guido van Rossum谈到了Python 3.0的构思:一直以来,除非要打破向后兼容性,否则很多缺陷和错误都无法修复。因此,Pyth
2023-01-31

Python3教程——5、Python3

一、Pycharm常用快捷键有颜色的为很常用,或不易发现 编辑类:Ctrl + Space 基本的代码完成(类、方法、属性)Ctrl + Alt + Space 类名完成Ctrl + Shift + Enter 语句完成Ctrl + P 参
2023-01-31

Python3中最常用的5种线程锁的应用

本篇内容主要讲解“Python3中最常用的5种线程锁的应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python3中最常用的5种线程锁的应用”吧!目录前言线程安全锁的作用Lock() 同步锁
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录