设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 服务器 > 系统 > 正文

并发编程-多进程(4)

发布时间:2021-01-07 09:21 所属栏目:52 来源:网络整理
导读:2.需要自己加锁处理。 from multiprocessing import Processfrom multiprocessing import Lockimport jsonimport timeimport osimport randomdef search(): time.sleep(random.randint(1,3)) # 模拟网络延迟(查询环

  2.需要自己加锁处理。

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


def search():
    time.sleep(random.randint(1,3))  # 模拟网络延迟(查询环节)
    with open(‘ticket.json‘,encoding=‘utf-8‘) as f1:
        dic = json.load(f1)
        print(f‘{os.getpid()} 查看了票数,剩余{dic["count"]}‘)


def paid():
    with open(‘ticket.json‘,encoding=‘utf-8‘) as f1:

        dic = json.load(f1)
    if dic[‘count‘] > 0:
        dic[‘count‘] -= 1
        time.sleep(random.randint(1,3))  # 模拟网络延迟(购买环节)
        with open(‘ticket.json‘,encoding=‘utf-8‘,mode=‘w‘) as f1:
            json.dump(dic,f1)
        print(f‘{os.getpid()} 购买成功‘)


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

if __name__ == ‘__main__‘:
    mutex = Lock()
    for i in range(6):
        p = Process(target=task,args=(mutex,))
        p.start()
示例

2.基于队列通信

进程之间互相隔离,要实现进程间通信(IPC,此机制帮我们自动处理锁的问题),multiprocessing支持两种形式:队列和管道,这两种消息都是使用消息传递。

#1:起到缓冲的作用
#2:平衡生产力和消费力
#3:解耦(降低耦合性)

队列(管道+锁实现):先进先出

并发编程-多进程

生产者消费者模型(基于队列通信):

from multiprocessing import Process
from multiprocessing import Queue
import time
import random
#生产者
def producer(q,name):
    for i in range(1,6):
        time.sleep(random.randint(1,3))
        ret=f‘{i}号包子‘
        q.put(ret)
        print(f‘生产者{name}生产了{ret}‘)
#消费者
def consumer(q,name):
    while 1:
        try:
            time.sleep(random.randint(1,3))
            food=q.get(timeout=3)
            print(f‘消费者{name}吃了{food}‘)
        except Exception:
            return

if __name__ == ‘__main__‘:
    q=Queue()#队列(容器)
    p1=Process(target=producer,args=(q,‘liye‘))
    p2=Process(target=consumer,‘haigou‘))
    p1.start()
    p2.start()
示例

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读