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))
day39 Pyhton 并发编程02 后的更多相关文章
- day39 Pyhton 并发编程02
一.内容回顾 并发和并行的区别 并发 宏观上是在同时运行的 微观上是一个一个顺序执行 同一时刻只有一个cpu在工作 并行 微观上就是同时执行的 同一时刻不止有一个cpu在工作 什么是进程 一个运行中的 ...
- 并发编程 02—— ConcurrentHashMap
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...
- C++并发编程 02 数据共享
在<C++并发编程实战>这本书中第3章主要将的是多线程之间的数据共享同步问题.在多线程之间需要进行数据同步的主要是条件竞争. 1 std::lock_guard<std::mute ...
- python基础-并发编程02
并发编程 子进程回收的两种方式 join()让主进程等待子进程结束,并回收子进程资源,主进程再结束并回收资源 from multiprocessing import Process import ti ...
- Java并发编程(02):线程核心机制,基础概念扩展
本文源码:GitHub·点这里 || GitEE·点这里 一.线程基本机制 1.概念描述 并发编程的特点是:可以将程序划分为多个分离且独立运行的任务,通过线程来驱动这些独立的任务执行,从而提升整体的效 ...
- day38 Pyhton 并发编程
# 网络编程 # arp协议 : # 1.这是一个通过ip找mac地址的协议 # 2.由于有了socket,用户在使用网络的时候,只需要关心对方用户的ip地址就可以了 # 3.如果用户即将和这个ip进 ...
- day43 Pyhton 并发编程06
一.内容回顾 线程 锁 为什么有了GIL之后还需要锁 多个线程同时操作全局变量还需要锁 当出现'非原子性操作',例如+= -= *= /= l.append(l) 原子性操作 a += 1 a= a ...
- day41 Pyhton 并发编程04
内容回顾 socket 最底层的网络通信 所有的网络通信都是基于socket 进程 什么是进程? 是操作系统的发展过程中,为了提高cpu的利用率,在操作系统同时运行多个程序的时候,为了数据的安 ...
随机推荐
- leetcode刷题-93复原IP地址
题目 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔. 示例: 输入: &q ...
- Python中的type(),isinstance,()dir(),的区别
1.type() type(),获取一个变量的类型,返回值为:<class '类名'>,属于class类型2.isinstance() isinstance(),判断一个对象是否属于某种数 ...
- 基于 ramfs 的 OTA
背景 默认的 OTA 方案是基于 recovery 系统完成的.某个产品考虑产品形态和 flash 容量之后,计划去掉 recovery 系统(不考虑掉电安全),这就需要 OTA 方案能支持在只有单个 ...
- C#开发PACS医学影像处理系统(六):加载Dicom影像
对于一款软件的扩展性和维护性来说,上层业务逻辑和UI表现一定要自己开发才有控制权,否则项目上线之后容易被掣肘, 而底层图像处理,我们不需要重复造轮子,这里推荐使用fo-dicom,同样基于Dicom3 ...
- python中的方向控制函数
方向控制函数:控制海龟方向,包含绝对角度&海龟角度 改变海龟运行方向,让海龟转向 angle :改变行进方向,将海归运行方向改变为某一个绝对的角度 例如 将坐标系中的海龟方向改变为绝对系中的4 ...
- Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包,严禁转载!!!
导读 之前用的都是SVN,由于工作需要用到Git,求人不如求己,技多不压身,多学一项技能,未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用doc ...
- php判断请求方式
1 /** 2 * 判断是否为get请求 3 * 4 * @return bool 5 */ 6 function is_get():bool 7 { 8 return $_SERVER['REQUE ...
- 第二篇 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- Guava Cache详解
适用性 缓存在很多场景下都是相当有用的.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存 Guava Cache与ConcurrentMap很相似,但也不 ...
- Java基础一篇过(二)泛型
一.啥是泛型 概述 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数. 格式 类名<类型名> 标记符 E - Element (在集合中使用 ...