python:进程操作
一、多进程应用
import socket from multiprocessing import Processdef talk(conn):conn.send(b'connected')ret = conn.recv(1024)print(ret)if __name__ == '__main__':sk = socket.socket()sk.bind(('127.0.0.1', 8080))sk.listen()while True:conn,addr = sk.accept()p = Process(target=talk,args=(conn,))p.start()conn.close()sk.close()
server
import socket sk = socket.socket() sk.connect(('127.0.0.1',8080)) ret = sk.recv(1024) print(ret) msg = input('>>>') sk.send(msg.encode('utf-8')) sk.close()
client
二、进程中的其他方法
import time from multiprocessing import Process def func():print('--'*10)time.sleep(15)print('--'*10)def cal_time():while True:time.sleep(1)print('过去了1秒')if __name__ == '__main__':p = Process(target=cal_time)p.daemon = True #守护进程:一定在开启进程之前设置 p.start()p2 = Process(target=func) # 15s p2.start()for i in range(100): # 10stime.sleep(0.1)print('*'*i)p2.join()
1,start()开启一个进程
join:用join可以让主进程等待子进程结束
1)p.daemon =True #守护进程
守护进程会随着主进程的代码执行结束而结束
正常的子进程没有执行完的时候主进程要一直等着
2)守护进程的作用
会随着主进程的代码执行结束而结束,不会等待其他子进程
3)注意:
守护进程要在start之间设置
守护进程中不能再开启子进程
2,is_alive与terminate
import time from multiprocessing import Process def func():print('wahaha')time.sleep(5)print('qqxing') if __name__ == '__main__':p = Process(target=func)p.start()print(p.is_alive()) time.sleep(0.1)p.terminate() print(p.is_alive()) time.sleep(1)print(p.is_alive())
p.is_alive() # 是否活着 True代表进程还在 False代表进程不在了p.terminate() # 结束一个进程,但是这个进程不会立刻被杀死
def func():print('wahaha')time.sleep(5)print('qqxing') if __name__ == '__main__':p = Process(target=func)p.start()print(p.name,p.pid)p.name = '哇哈哈哈'print(p.name)class MyProcess(Process):def run(self):print('wahaha',self.name,self.pid)time.sleep(5)print('qqxing',self.name,self.pid) if __name__ == '__main__':p = MyProcess()p.start()print(p.pid) # pid 查看这个进程 进程id # name 查看这个进程的名字
三、锁
from multiprocessing import Lock#调用锁 lock = Lock() #创建一个锁 lock.acquire() # 需要锁 拿钥匙 lock.acquire() # 需要锁 发生阻塞 lock.release() # 释放锁 还钥匙
锁 就是在并发编程中 保证数据安全
import json import time import random from multiprocessing import Lock from multiprocessing import Processdef search(i):with open('ticket') as f:print(i,json.load(f)['count'])def get(i):with open('ticket') as f:ticket_num = json.load(f)['count']time.sleep(random.random())if ticket_num > 0:with open('ticket','w') as f:json.dump({'count':ticket_num-1},f)print('%s买到票了'%i)else:print('%s没票了'%i)def task(i,lock):search(i) # 查看票 lock.acquire()get(i) # 抢票 lock.release()if __name__ == '__main__':lock = Lock()for i in range(20): # 20个人同时抢票p = Process(target=task,args=(i,lock))p.start() import json import time import random from multiprocessing import Lock from multiprocessing import Processdef search(i):with open('ticket') as f:print(i,json.load(f)['count'])def get(i):with open('ticket') as f:ticket_num = json.load(f)['count']time.sleep(random.random())if ticket_num > 0:with open('ticket','w') as f:json.dump({'count':ticket_num-1},f)print('%s买到票了'%i)else:print('%s没票了'%i)def task(i,lock):search(i) # 查看票 lock.acquire()get(i) # 抢票 lock.release()if __name__ == '__main__':lock = Lock()for i in range(20): # 20个人同时抢票p = Process(target=task,args=(i,lock))p.start()
买火车票的程序
四、信号量
import time import random from multiprocessing import Semaphore#调用信号量 from multiprocessing import Process def sing(i,sem):sem.acquire()print('%s : 进入 ktv'%i)time.sleep(random.randint(1,10))print('%s : 出 ktv'%i)sem.release() # 迷你唱吧 20个人,同一时间只能有4个人进去唱歌 if __name__ == '__main__':sem = Semaphore(4)for i in range(20):Process(target=sing,args=(i,sem)).start() #信号量的数量就是锁当中钥匙的数量
五、事件
事件 —— 异步阻塞事件是所有的进程,都陷入阻塞
from multiprocessing import Event #调用事件模块 # e = Event() # 实例化一个事件 标志/类似于交通信号灯 # e.set() # 将标志变成非阻塞/类似于交通灯变绿 # e.wait() # 刚实例化出来的一个事件对象,默认的信号是阻塞信号/默认是红灯 # # 执行到wait,要先看灯,绿灯行红灯停,如果在停的过程中灯绿了, # # 就变成非阻塞了 # e.clear() # 将标志又变成阻塞/交通灯变红 # # e.is_set() # 是否阻塞 True就是绿灯 False就是红灯
import time import random from multiprocessing import Process from multiprocessing import Event def traffic_light(e):while True:if e.is_set():time.sleep(3)print('红灯亮')e.clear() # 绿变红else:time.sleep(3)print('绿灯亮')e.set() # 红变绿def car(i,e):e.wait()print('%s车通过'%i)if __name__ == '__main__':e = Event() # 立一个红灯tra = Process(target=traffic_light,args=(e,))tra.start() # 启动一个进程来控制红绿灯for i in range(100):if i%6 == 0 :time.sleep(random.randint(1,3))car_pro = Process(target=car, args=(i,e))car_pro.start()
六、队列
队列进程之间的通信
1.进程之间通信 可以使用multiprocessing 的 Queue模块2.队列有两种创建方式 第一种不传参数 这个队列就没有长度限制 ;传参数,创建一个有最大长度限制的队列3.提供两个重要方法;put get4.qsize查看队列的大小
import time def producer(q): # 生产者for i in range(100):q.put('包子%s'%i)def consumer(q): # 消费者for i in range(100):time.sleep(1)print(q.get())if __name__ == '__main__':q = Queue(10) # 托盘p = Process(target=producer,args=(q,))p.start()c1 = Process(target=consumer, args=(q,))c2 = Process(target=consumer, args=(q,))c1.start()c2.start()
转载于:https://www.cnblogs.com/kakawith/p/8406056.html
python:进程操作相关推荐
- 在python程序中的进程操作
********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...
- python在中小学教学中的应用-在python程序中的进程操作
********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...
- python启动多个进程_Python程序中的进程操作--—--开启多进程
Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...
- python打开一个软件并进行操作_python程序中的进程操作
之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...
- Python进程、线程、协程详解
进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...
- python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入
Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...
- python进程、线程的学习心得
什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...
- python -- 进程
什么是进程 要了解进程先了解操作系统,可以参考一下我的上一篇博客:操作系统 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基 ...
- Python文件操作学习总结
Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...
- 【Tools】python环境操作笔记
python环境操作笔记 1.安装Python虚拟环境 2.python pip 添加清华镜像 3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法 4.Python下关于 tkint ...
最新文章
- 它来了!ROS2从入门到精通:理论与实战
- VAE(Variational Autoencoder)的原理
- C# Socket与实现
- arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别
- 菜鸟之2011-2012学年总结
- 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)
- html中怎么选择相同的代码,不同的HTML,相同的代码隐藏和相同的控件
- 荣耀发布了全球首款 4800 万像素手机,并推出 YOYO 智能音箱...
- 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
- fpga烧写bin文件_FPGA烧写程序
- Unity3D之UGUI基础5:Toggle复选框
- 斑斓中国BlenderCN项目库
- 数据库DBeaverEE 22.0.2
- 在mysql怎样查询地址和电话_手机号码怎么查找位置
- Navicat Premium 12注册机破解方法
- 仅为0.9兆 谷歌金山词霸1.5版本正式发布
- 线性回归之最小二乘法(高斯-马尔可夫定理)
- Java执行语句--------04
- 有趣的小事——程序员难!
- 一文读懂配置管理(CM)
热门文章
- 程序21、程序22和程序23
- Windows 8开机时间
- 嵌入式linux 用虚拟机,如何制作嵌入式Linux虚拟机
- 非线性振动 matlab,用MATLAB分析非线性弹簧振子的振动
- plsql创建中文表头_如何使用快捷键来提升Excel斜线表头绘制速度,照着学就行了...
- java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
- sqlanyshere转mysql_【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
- python requests 示例_python的requests模块实现登陆示例
- import是引进外部函数吗_你必须要知道的Python中的main函数
- python生成wheel包注意事项