加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

并发编程-多进程

发布时间:2021-01-08 02:28:32 所属栏目:站长百科 来源:网络整理
导读:一.进程 新进程的创建都是由一个 已经存在的进程 执行了一个 用于创建进程的系统调用 而创建的。 1.在UNIX中:fork会创建一个与父进程一摸一样的副本 2.在Windows:系统调用CreateProcess创建进程 进程的状态 程序遇到IO操作(Input、output),会阻塞,IO完成

  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:解耦(降低耦合性)

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

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读