# 实现的内容 模拟购票 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())

进程 线程的顺序
守护进程:两个子进程,其中一个是守护子进程,一个主进程, 守护进程结束:是在主进程代码一结束就结束,守护线程:两个子线程,其中一个是守护子线程,一个是主线程,守护线程结束:是在非守护子线程结束就结束。

转载于:https://www.cnblogs.com/xiaoluoboer/p/7978697.html

day 34 进程线程排序 抢票 初级生产者消费者相关推荐

  1. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  2. 基于Lock的卖票和生产者消费者案例

    1.三个售票员卖出30张票 线程 操作(对外暴露的调用方法) 资源类 2.生产者消费者问题 题目:现在两个线程,可以操作初始值为零的一个变量,实现一个线程对该变量加1,一个线程对该变量减1,实现交替, ...

  3. java-线程安全问题,线程实现线程同步,线程状态,等待唤醒机制,生产者消费者模型

    目录标题 解决线程安全问题手段:线程同步 实现同步操作步骤 1.同步代码块 2.同步方法 静态同步方法 3.Lock接口的锁机制 线程状态 生产者消费者模型:等待唤醒 等待唤醒案例 线程安全问题是不能 ...

  4. Java 多线程(二)线程间的通信应用--生产者消费者(未完)

    对于多个生产者和消费者. 为什么要定义while判断标记. 原因:让被唤醒的线程再一次判断标记. 为什么定义notifyAll, 因为需要唤醒对方线程. 因为只用notify,容易出现只唤醒本方线程的 ...

  5. 线程的基本协作和生产者消费者

    协作基础(wait/notify) Java的根父类是Object,Java在Object类而非Thread类中,定义了一些线程协作的基本方法,使得每个对象都可以调用这些方法,这些方法有两类,一类是w ...

  6. Java20-day11【实现多线程(进程、线程-调度-控制-生命周期)、线程同步(同步代码块、线程安全、Lock)、生产者消费者(模式概述、案例)】

    视频+资料[链接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg   提取码:zjxs] Java基础--学习笔记(零起点打开java世界的大门)--博 ...

  7. 浅谈抢票软件的危害及模拟分析

    抢票软件的出现,在一定程度上缓解了 铁路12306官方购票系统的售票压力,并被人们加 上"买票快","买票方便"的标签,但其实抢票 软件类似于生活中的一种插队现 ...

  8. JUC系列之模拟抢票(N人同时抢票,票不足系统补仓,N-M人继续抢票)

    下载 http://download.csdn.net/download/crazyzxljing0621/9969870 前言 10.1要去苏州玩. 9月初去携程买票,发现过几天才放票 现在可以预约 ...

  9. Java并发队列ConcurrentLinkedQueue抢票示例

    ConcurrentLinkedQueue并发抢票示例 在学习java并发的时候,在网上看了几个靠加锁方法块的方法来演示抢票的示例,运行起来还是要起并发冲突.后来看到一个用ConcurrentLink ...

  10. 假期延长,抢票软件到底还行不?

    作者 | 唐亚华 本文经授权转载自燃财经(ID:rancaijing) 春节假期即将结束,人口大迁移又要来临. 虽然12306近日已经宣称屏蔽了部分抢票软件,并推出官方候补功能,但市面上提供抢票服务的 ...

最新文章

  1. D1net阅闻:思科占全球交换路由器53%市场份额
  2. jquery UI 后台图
  3. 【C++提高班】c++数组遍历比较相邻的数值
  4. 从spring-session存储结构探讨session存储方案的演变
  5. window.open 不显示地址栏_谷歌浏览器Chrome显示「由贵单位管理」怎么解决?非阿里...
  6. 此项目的默认Web访问模式设置为文件共享, 但是无法从路径(此为转贴)
  7. 有道云笔记到简书的迁移工具
  8. Design Patterns - Mediator Pattern
  9. 面试系列第1篇:常见面试题和面试套路有哪些?
  10. kali操作系统SSH问题解决方案
  11. [转载] python内置函数 compile()
  12. Solidity陷阱:以太坊的随机数生成
  13. java 性能优化:35 个小细节,让你提升 java 代码的运行效率
  14. Unity基础学习之Unity引擎学习(一)
  15. mysql 全库查询关键字_数据库查询语句关键字总结
  16. 人工智能基础(高中版)教材补充和资源分享之二 机器人学矩阵
  17. 千年3步法外挂 千年3脚本 千年3外挂 千年3最新外挂
  18. [产品经理]产品经理的职责
  19. 4.10 期货每日早盘操作建议
  20. 数学建模学习2论文排版

热门文章

  1. 如何有逻辑的,简单清晰的回应问题
  2. MyBatis学习笔记(一) 概述
  3. django1.9 创建数据表
  4. Spring-MVC案例:Spitter的笔记
  5. XMPP聊天环境配置
  6. 《算法竞赛入门经典》习题及反思 -2
  7. Java中按值传递与按引用传递的区别
  8. python 连接 mysql
  9. Hdu2558(欧拉函数)
  10. Java容器工具类Arrays