day39 Pyhton 并发编程02 后

一.开启子进程的另一种方式

import os
from multiprocessing import Process
class MyProcess(Process):
    def __init__(self,参数):
        super().__init__()
        self.一个属性 = 参数

    def run(self):
        print('子进程中要执行的代码')

if __name__ == '__main__':
    conn = '一个链接'
    mp = MyProcess(conn)
    mp.start()

锁的概念

import json
import time
from multiprocessing import Process,Lock def search(name): '''查询余票的功能''' with open('ticket') as f: dic = json.load(f) print(name , dic['count']) def buy(name): with open('ticket') as f: dic = json.load(f) time.sleep(0.1) if dic['count'] > 0: print(name,'买到票了') dic['count'] -=1 time.sleep(0.1) with open('ticket','w') as f: json.dump(dic,f) def get_ticket(name,lock): search(name) lock.acquire() # 只有第一个到达的进程才能获取锁,剩下的其他人都需要在这里阻塞  buy(name) lock.release() # 有一个人还锁,会有一个人再结束阻塞拿到钥匙 if __name__ == '__main__': dic={'count':1} with open('ticket', 'w') as f: json.dump(dic, f) lock = Lock() for i in range(10): p = Process(target=get_ticket,args=('name%s'%i,lock)) p.start()

多进程并发
server
import socket,time
from multiprocessing import Process
def talk(conn):

    while True:
        msg = conn.recv(1024).decode()
        conn.send(msg.upper().encode())

if __name__ == '__main__':
    # 这句话下面的所有代码都只在主进程中执行
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.listen()
    while True:
        conn,addr = sk.accept()
        Process(target=talk,args=(conn,)).start()

# 卡 大量的while True 并且代码中并没有太多的其他操作
# 如果我们使用socketserver,不会这么卡
# 多进程确实可以帮助我们实现并发效果,但是还不够完美
# 操作系统没开启一个进程要消耗大量的资源
# 操作系统要负责调度进程 进程越多 调度起来就越吃力
client
import socket

sk = socket.socket()
sk.connect(('127.0.0.1',9000))


while True:
    sk.send(b'hello')
    print(sk.recv(1024))

 

 

转载于:https://www.cnblogs.com/pythonz/p/10084217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值