队列

  #put 和  get

#__author : 'liuyang'
#date : 2019/4/16 0016 上午 11:32
# 多进程之间的数据是隔离的
# 进程之间的数据交互
# 是可以通过网络/文件来实现的
# socket 来实现 # IPC inter process communication
# 多个进程之间的通信
#通过python的模块实现的
# 基于原生socket
# 基于进程队列的 *****
#第三方的软件/工具来实现:
# 不需要写socket(写好了)
# 需要安装
#memcache redis rabbitMQ kafka
# 网络
def son():
pass
from multiprocessing import Queue #可以完成进程之间的通信的特殊的队列
# from queue import Queue #不能完成进程之间的通信
# q = Queue()
# q.put(1)
# q.put(2)
# print(q.get())
# print(q.get())
#
from multiprocessing import Queue,Process
# def son(q):
# print(q.get())
# if __name__ == '__main__':
# q = Queue()
# Process(target=son,args=(q,)).start()
# # Process
# q.put('wahah') #生产者消费者模型
#python 程序
#模仿浏览器去访问一个网页
#urllib.urlopen(url)
# 开多线程 同样的时间 可以爬更多的网站 # 紧耦合 松耦合 ?(包一个包子 买一个包子)(包很多包子 买很多包子)
# 获得数据 生产者
# 处理数据 消费者
# 调节生产者的个数或者消费者的个数让程序的效率达到最平衡和最大化
# 解耦思想
import time
import random
# def producer(q): #爬虫
# for i in range(10):
# time.sleep(random.random())#爬虫的时间
# food = '泔水%s'%i
# print('%s 生产了 %s'%('taibai',food))
# q.put(food)
# # num = random.randint(1,100)
# # print('producer 生产了一个数据%s'%num,)
# q.put(food)
# def consumer(q,name):
# while True: # 处理数据
# food = q.get() # food = shiwu / None
# if not food : break
# time.sleep(random.uniform(1,2)) #处理数据再短也要处理一会
# print('%s 吃了 %s '%(name,food))
# num = q.get()
# print('消费者受到了一个%s'%num)
# if __name__ == '__main__':
# q = Queue()
# p1 = Process(target=producer,args=(q,))
# p1.start()
# c1 = Process(target=consumer,args=(q,'alex'))
# c1.start()
# c2 = Process(target=consumer,args=(q,'wusir'))
# c2.start()
# p1.join() #阻在这里
# q.put(None) #传过去None 判断退出
# q.put(None) from multiprocessing import JoinableQueue,Process
# 放任务 取任务 #生产数据 放进来 计数器 加 1
# q.join() 阻塞 直到为零
#反回 一个消息 q.task_done def consumer(jq,name):
while True: # 处理数据
food = jq.get()
# if food : break
time.sleep(random.uniform(1,2)) #处理数据再短也要处理一会
print('%s 吃了 %s '%(name,food))
jq.task_done() def producer(jq): #爬虫
for i in range(10):
time.sleep(random.random())#爬虫的时间
food = '泔水%s'%i
print('%s 生产了 %s'%('taibai',food))
jq.put(food)
jq.join() if __name__ == '__main__':
jq = JoinableQueue()
c1 = Process(target=consumer,args = (jq,'alex'))
p1 = Process(target=producer,args = (jq,))
c1.daemon = True
c1.start()
p1.start()
p1.join() # consumer 所有数据消费完
# 队列join 结束
# producer 继承结束
# p1 进程阻塞结束
# 主进程的代码结束
# 守护进程结束 # 锁 同一时刻 同一段代码, 只能有一个进程来执行这段代码
#保证数据的安全
#多进程中,只有去操作一些,进程之间可以共享的数据资源的时候才需要枷锁
#lock = Lock()
#acquire() release
#with lock :
#Lock 互斥锁 # 队列
#IPC
#PUT
#GET
# 生产者消费者模型 基于队列把生产者和消费者数据的过程分开了 #补充:
#队列 是进程安全的(自带了锁) :一个人来取得时候不会有另个人来 ##AttributeError: module 'socket' has no attribute 'socket
#队列 基于什么实现的 文件家族的socket服务
# 基于文件家族的socket 服务实现的ipc不止一个,管道pipe
#pipe 会出现安全问题 没带锁
# 队列 = 管道+锁
#管道 是基于文件家族的socket 服务实现
from multiprocessing import Pipe

队列

  #acquire()  和 release()

#__author : 'liuyang'
#date : 2019/4/16 0016 上午 10:31
# 抢票 的 多台机器服务 (请求票的时候有可能信息修改了) #票的信息都存到一个大的
#
from multiprocessing import Process
import json
import time # 数据的安全性 一张票 被很多个人买了
def search_ticket(name):
with open('ticket',encoding='utf-8')as f:
dic = json.load(f)
print('%s查询余票为%s'%(name,dic['count']))
# def buy_ticket(name):
# with open('ticket', encoding='utf-8')as f:
# dic = json.load(f)
# time.sleep(0.2)
# if dic['count'] >= 1 :
# print('%s买到票了'%name)
# dic['count'] -= 1
# time.sleep(0.2)
# with open('ticket', encoding='utf-8')as f:
# # dic = json.load
# else:
# print('没了')
#十个人同时查票
def user(name):
#不涉及买 随便 并发
search_ticket(name)
# buy_ticket(name) # with 还会处理异常 前一个 出错了 以后的都可以释放 跳出异常
# 不等了
if __name__ == '__main__':
l = ['alex','b','c']
for name in l:
search_ticket(name)
# p = Process(target=search_ticket,args=(name,))
# p.start() # 1. 牺牲了效率 ,保证了数据安全 关闭了 多进程 异步 并发
# 在数据安全面前 效率不值一提 (和钱打交道的app都巨慢)
# 不涉及钱的 可以 牺牲一点安全
#2 用户就觉得 很慢 体验很差. # join() 是同步 加单道了 一个个执行 # 锁的应用场景 # # 内存里还有 子进程结束 子进程没了 变量 join 加入内存里了

内容回顾

#__author : 'liuyang'
#date : 2019/4/16 0016 上午 10:31
# 抢票 的 多台机器服务 (请求票的时候有可能信息修改了) #票的信息都存到一个大的
#
from multiprocessing import Process
import json
import time # 数据的安全性 一张票 被很多个人买了
def search_ticket(name):
with open('ticket',encoding='utf-8')as f:
dic = json.load(f)
print('%s查询余票为%s'%(name,dic['count']))
# def buy_ticket(name):
# with open('ticket', encoding='utf-8')as f:
# dic = json.load(f)
# time.sleep(0.2)
# if dic['count'] >= 1 :
# print('%s买到票了'%name)
# dic['count'] -= 1
# time.sleep(0.2)
# with open('ticket', encoding='utf-8')as f:
# # dic = json.load
# else:
# print('没了')
#十个人同时查票
def user(name):
#不涉及买 随便 并发
search_ticket(name)
# buy_ticket(name) # with 还会处理异常 前一个 出错了 以后的都可以释放 跳出异常
# 不等了
if __name__ == '__main__':
l = ['alex','b','c']
for name in l:
search_ticket(name)
# p = Process(target=search_ticket,args=(name,))
# p.start() # 1. 牺牲了效率 ,保证了数据安全 关闭了 多进程 异步 并发
# 在数据安全面前 效率不值一提 (和钱打交道的app都巨慢)
# 不涉及钱的 可以 牺牲一点安全
#2 用户就觉得 很慢 体验很差. # join() 是同步 加单道了 一个个执行 # 锁的应用场景 # # 内存里还有 子进程结束 子进程没了 变量 join 加入内存里了

内容回顾到10.40

day33 锁和队列的更多相关文章

  1. 一个无锁消息队列引发的血案(六)——RingQueue(中) 休眠的艺术 [续]

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  2. 一个无锁消息队列引发的血案(五)——RingQueue(中) 休眠的艺术

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  3. 一个无锁消息队列引发的血案(四)——月:RingQueue(上) 自旋锁

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  4. 一个无锁消息队列引发的血案(三)——地:q3.h 与 RingBuffer

    目录 (一)起因 (二)混合自旋锁 (三)q3.h 与 RingBuffer (四)RingQueue(上) 自旋锁 (五)RingQueue(中) 休眠的艺术 (六)RingQueue(中) 休眠的 ...

  5. 铁乐学python_Day42_锁和队列

    铁乐学python_Day42_锁和队列 例:多个线程抢占资源的情况 from threading import Thread import time def work(): global n tem ...

  6. 【数据结构】C++语言无锁环形队列的实现

    无锁环形队列 1.Ring_Queue在payload前加入一个头,来表示当前节点的状态 2.当前节点的状态包括可以读.可以写.正在读.正在写 3.当读完成后将节点状态改为可以写,当写完成后将节点状态 ...

  7. Python并发编程03 /僵孤进程,孤儿进程、进程互斥锁,进程队列、进程之间的通信

    Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 目录 Python并发编程03 /僵孤进程,孤儿进程.进程互斥锁,进程队列.进程之间的通信 1. 僵尸进程/孤儿进 ...

  8. [并发编程 - socketserver模块实现并发、[进程查看父子进程pid、僵尸进程、孤儿进程、守护进程、互斥锁、队列、生产者消费者模型]

    [并发编程 - socketserver模块实现并发.[进程查看父子进程pid.僵尸进程.孤儿进程.守护进程.互斥锁.队列.生产者消费者模型] socketserver模块实现并发 基于tcp的套接字 ...

  9. DPDK 无锁环形队列(Ring)详解

    DPDK 无锁环形队列(Ring) 此篇文章主要用来学习和记录DPDK中无锁环形队列相关内容,结合了官方文档说明和源码中的实现,供大家交流和学习. Author : Toney Email : vip ...

随机推荐

  1. if判断,switch语句

    if ; else if; else; 判断操作: 格式示例: public class scanner { public static void main(String[] args){ int a ...

  2. nodejs + express + express-session + redis

    nodejs + express + express-session + redis 标题似乎又是不太对,大家领会精神哈 Express 安装express-generator,然后用它来创建一个工程 ...

  3. 【COCI 2015/2016 #3】Nekameleoni

    题目描述 “这好难啊,我有一个简单点的题,他们解决不了.” AKPAKP有一个长度为nn的线段,这个线段原来染有颜色,AKPAKP只认识kk种颜色.当然原来的颜色也包含在着kk种颜色之间. 可以进行m ...

  4. 一个socket数量的问题

    最近遇到一个问题,从业务上出现ftp异常: ftp .**.**.** ftp: connect: Cannot assign requested address 这台服务器上的socket统计如下: ...

  5. lombok踩坑与思考

    虽然接触到lombok已经有很长时间,但是大量使用lombok以减少代码编写还是在新团队编写新代码维护老代码中遇到的. 我个人并不主张使用lombok,其带来的代价足以抵消其便利,但是由于团队编码风格 ...

  6. Serializer fields

    1.导入 from rest_framework import serializers field参数 1.read_only read_only=True 表示不允许用户自己上传,只能用于api的输 ...

  7. Java框架spring 学习笔记(十六):c3p0连接池的配置以及dao使用jdbcTemplate

    连接池可以大大提高数据库的性能和连接速度,将那些已连接的数据库连接存放在一个连接池里,以后别人要连接数据库的时候,将不会重新建立数据库连接,直接从连接池中取出可用的连接,用户使用完毕后,会释放连接重新 ...

  8. python 获取list的下标

    print(your_list.index('your_item')) #your_list为列表名称 your_item为需要修该的数据

  9. HBase数据压缩算法编码探索

    摘要: 本文主要介绍了hbase对数据压缩,编码的支持,以及云hbase在社区基础上对数据压缩率和访问速度上了进行的改进. 前言 你可曾遇到这种需求,只有几百qps的冷数据缓存,却因为存储水位要浪费几 ...

  10. R语言读取JSON数据