day 34 进程线程排序 抢票 初级生产者消费者
# 实现的内容 模拟购票 20个人买,就有一张购票查,的时候大家都看到,但是购买只能一人购买成功
#利用互斥锁
# from multiprocessing import Process,Lock
# import os,random,json,time
# def search():
# with open('db.txt',encoding= 'utf-8')as f:
# dic = json.load(f) #反序列化 变成字典 因为文件里内容本身是字符串
# print('%s剩余的票数%s'%(os.getpid(),dic['count']))
# def get():
# with open('db.txt',encoding='utf-8')as read_f:
# dic = json.load(read_f)
# if dic['count']>0:
# dic['count']-=1
# time.sleep(random.randint(1,3))
# with open('db.txt','w',encoding='utf-8')as write_f:
# json.dump(dic,write_f) ##把字典写入文件 并且以字符串的形式
# print('%s抢票成功'% os.getpid())
#
# def task(mutex):
# search()
# mutex.acquire() # acquire 获得 互斥获得 加锁
# get()
# mutex.release() # 互斥释放 解锁
# if __name__=='__main__':
# mutex = Lock()
# for i in range(20):
# p = Process(target=task,args=(mutex,))
# p.start()
# #p.join() # 这个效果不能让其他人看见有票
##文件操作 文件的内容是默认存在的类型是字符串,而且里面用的json 必须是双引号。
# mutex 互斥
# mutex = Lock
# mutex.acquire() 加锁
# mutex.release 解锁 # db.txt
# {"count": 1}
# ----------线程的加锁的两种方法
# from threading import Thread,Lock
# import time
# n=100
#
# def task():
# # global n
# # mutex.acquire()
# # temp=n
# # time.sleep(0.1)
# # n=temp-1
# # mutex.release()
#
# global n
# with mutex:
# temp=n
# time.sleep(0.1)
# n=temp-1
# if __name__ == '__main__':
# mutex=Lock()
# t_l=[]
# for i in range(100):
# t=Thread(target=task)
# t_l.append(t)
# t.start()
# for t in t_l:
# t.join()
# print(n)
# ---------------
###生产者和消费者 初级供给 实现的并发
# from multiprocessing import Process,Queue
# import os,random,time
# def producer(q):
# for i in range(10):
# res = '包子%s'%i
# time.sleep(0.5)
# q.put(res)
# print('%s生产了%s'%(os.getpid(),res))
# ###time.sleep(random.randint(2,3)) #如果是启用此行 因为comsumer 的时间比较充裕比生产的
# ##供远远小于求 所以出现串行,生产出一个就立马吃一个
#
# def consumer(q):
# while True:
# res= q.get()
# if res is None:
# break
# print('%s吃了%s'%(os.getpid(),res))
# time.sleep(random.randint(2, 3))
# if __name__== '__main__':
# q = Queue()
# p = Process(target=producer,args=(q,))
# c = Process(target=consumer,args=(q,))
# p.start()
# c.start()
# p.join()
# q.put(None)
# print('主') import queue #线程队列 # # 队列 线程的排序
# q=queue.Queue(4)
# q.put({'a':1})
# q.put('xxxxx')
# q.put(3)
# q.put(4)
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
# 1进程的排序
# from multiprocessing import Queue
# q = Queue(3)
# q.put(3)
# q.put('wang')
# q.put({'wang':777})
# print(q.get())
# print(q.get())
# print(q.get())
# 3
# wang
# {'wang': 777}
# 进程引用序列 从前到后依次取值
# 变量=Queue(数字存几个)
# 变量.put(任意数据类型)
# 变量.get() 2#优先级队列 从小到大的排列
# q=queue.PriorityQueue(4)
# q.put((10,{'a':1}))
# q.put((-1,'xxxxx'))
# q.put((0,3))
# q.put((4,))
#
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get())
#
# (-1, 'xxxxx')
# (0, 3)
# (4,)
# (10, {'a}
# 3 堆栈 排序从后到前排序
# q=queue.LifoQueue(4)
# q.put({'a':1})
# q.put('xxxxx')
# q.put(3)
# q.put(4)
#
# print(q.get())
# print(q.get())
# print(q.get())
# print(q.get()) 进程 线程的顺序
守护进程:两个子进程,其中一个是守护子进程,一个主进程, 守护进程结束:是在主进程代码一结束就结束,
守护线程:两个子线程,其中一个是守护子线程,一个是主线程,守护线程结束:是在非守护子线程结束就结束。
day 34 进程线程排序 抢票 初级生产者消费者的更多相关文章
- 进程部分(IPC机制及生产者消费者模型)和线程部分
进程部分 一:进程间通信IPC机制:由于进程之间的内存空间是相互隔离的,所以为了进程间的通信需要一个共享的内存空间, 但是共享带来的问题是数据在写的时候就不安全了,所以需要一种机制既有能共享的内存 空 ...
- 进程Queue、线程Queue、堆栈、生产者消费者模型
没学队列之前,可以用文件实现进程之间通信 但是有2个问题: 1. 速度慢:文件是保存在硬盘空间 2. 为了数据安全要加锁(处理锁是一件很麻烦的事,容易死锁,建议自己轻易不要处理锁) 队列:队列是基于管 ...
- python并发编程之多进程(二):互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
- python开发进程:互斥锁(同步锁)&进程其他属性&进程间通信(queue)&生产者消费者模型
一,互斥锁,同步锁 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 竞争带来的结果就是错乱,如何控制,就是加锁处理 part1:多个进程共享同一打印终 ...
- python网络编程--进程(方法和通信),锁, 队列,生产者消费者模型
1.进程 正在进行的一个过程或者说一个任务.负责执行任务的是cpu 进程(Process: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在 ...
- 并发编程 - 进程 - 1.队列的使用/2.生产者消费者模型/3.JoinableQueue
1.队列的使用: 队列引用的前提: 多个进程对同一块共享数据的修改:要从硬盘读文件,慢,还要考虑上锁: 所以就出现了 队列 和 管道 都在内存中(快): 队列 = 管道 + 上锁 用队列的目的: 进程 ...
- Linux进程通信之共享内存实现生产者/消费者模式
共享内存 共享内存是内核为进程创建的一个特殊内存段,它将出现在进程自己的地址空间中,其它进程可以将同一段共享内存连接(attach)到自己的地址空间.这是最快的进程间通信方式,但是不提供任何同步功能( ...
- java 线程池、多线程实战(生产者消费者模型,1 vs 10) 附案例源码
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- Linux下进程的同步相互排斥实例——生产者消费者
linux下的同步和相互排斥 Linux sync_mutex 看的更舒服点的版本号= = https://github.com/Svtter/MyBlog/blob/master/Linux/pth ...
随机推荐
- Confluence 6 归档一个空间
当你认为一个空间不再需要实时进行编辑,但你还希望在后面某个时候能够对空间重新进行访问编辑的时候,你可以对空间进行归档.归档一个空间,这样你可以让你归档的空间让最少的人能看见,但是你的空间还是可以在 C ...
- SPL之AccessArray
<?php /** * Class MyArrayAccess * 提供像访问数组一样访问对象的能力的接口 */ class MyArrayAccess implements ArrayAcce ...
- python记录_day11 闭包 迭代器
一.第一类对象: 函数名是一个变量,可以当普通变量使用,但它又是一个特殊的变量,与括号配合可以执行函数. 函数名的运用 1.单独打印是一个内存地址 2.可以给其他变量赋值 3.可以作为容器类变量的元素 ...
- 【IDEA】【7】Git更新及提交
如果是Git管理的项目,顶部会出现这样的按钮 绿色代表commit到本地 蓝色代表update最新代码 Push:推送到远程服务器:右键项目->Git->Repository->Pu ...
- [转载]Python使用@property装饰器--getter和setter方法变成属性
原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...
- const 内联 枚举 宏
const 常量 程序运行时在常量表中,系统为它分配内存,在堆栈分配了空间:const常量有数据类型:语句末有分号:有类型检查:可以限制范围 //将所有不希望改变的变量加const修饰 const ...
- [LeetCode] 23. Merge k Sorted Lists ☆☆☆☆☆
转载:https://leetcode.windliang.cc/leetCode-23-Merge-k-Sorted-Lists.html 描述 Merge k sorted linked list ...
- [转]java nio解决半包 粘包问题
java nio解决半包 粘包问题 NIO socket是非阻塞的通讯模式,与IO阻塞式的通讯不同点在于NIO的数据要通过channel放到一个缓存池ByteBuffer中,然后再从这个缓存池中读出数 ...
- Oracle中如何查询一个表的所有字段名和数据类型
Oracle中如何查询一个表的所有字段名和数据类型 查询语法 select A.COLUMN_NAME,A.DATA_TYPE from user_tab_columns A where TABLE_ ...
- Android--Android Studio 打开ADM报错
Android studio无法打开类似与eclipse的DDMS, 在android studio里点击android device monitor(点击菜单栏里的Tools->Android ...