一、多进程应用

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:进程操作相关推荐

  1. 在python程序中的进程操作

    ********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...

  2. python在中小学教学中的应用-在python程序中的进程操作

    ********在python程序中的进程操作********之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了, 运行中的程序就是一个进程.所有的进程都是通过 ...

  3. python启动多个进程_Python程序中的进程操作--—--开启多进程

    Python程序中的进程操作-----开启多进程 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创 ...

  4. python打开一个软件并进行操作_python程序中的进程操作

    之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起来的python程序也是一个进程 ...

  5. Python进程、线程、协程详解

    进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CPU是计算机的核心,它承担计算机的所有任务. 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配.任务的调度. ...

  6. python关闭读写的所有的文件-Python文件操作:文件的打开关闭读取写入

    Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文 ...

  7. python进程、线程的学习心得

    什么是多线程竞争? 线程不是独立的,同一个进程里的线程,线程间的数据是共享的,多线程操作时,容易造成数据的混乱,线程不安全. 如何解决? 互斥锁. 好处:能够保证某段关键代码执行时,只有一个线程操作, ...

  8. python -- 进程

    什么是进程 要了解进程先了解操作系统,可以参考一下我的上一篇博客:操作系统 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基 ...

  9. Python文件操作学习总结

    Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open( ...

  10. 【Tools】python环境操作笔记

    python环境操作笔记 1.安装Python虚拟环境 2.python pip 添加清华镜像 3.Ubuntu卸载python后出现系统崩溃以及各种问题的解决方法 4.Python下关于 tkint ...

最新文章

  1. 它来了!ROS2从入门到精通:理论与实战
  2. VAE(Variational Autoencoder)的原理
  3. C# Socket与实现
  4. arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别
  5. 菜鸟之2011-2012学年总结
  6. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)
  7. html中怎么选择相同的代码,不同的HTML,相同的代码隐藏和相同的控件
  8. 荣耀发布了全球首款 4800 万像素手机,并推出 YOYO 智能音箱...
  9. 手册中数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留的理解
  10. fpga烧写bin文件_FPGA烧写程序
  11. Unity3D之UGUI基础5:Toggle复选框
  12. 斑斓中国BlenderCN项目库
  13. 数据库DBeaverEE 22.0.2
  14. 在mysql怎样查询地址和电话_手机号码怎么查找位置
  15. Navicat Premium 12注册机破解方法
  16. 仅为0.9兆 谷歌金山词霸1.5版本正式发布
  17. 线性回归之最小二乘法(高斯-马尔可夫定理)
  18. Java执行语句--------04
  19. 有趣的小事——程序员难!
  20. 一文读懂配置管理(CM)

热门文章

  1. 程序21、程序22和程序23
  2. Windows 8开机时间
  3. 嵌入式linux 用虚拟机,如何制作嵌入式Linux虚拟机
  4. 非线性振动 matlab,用MATLAB分析非线性弹簧振子的振动
  5. plsql创建中文表头_如何使用快捷键来提升Excel斜线表头绘制速度,照着学就行了...
  6. java饿汉式有啥作用,Java面试 - 什么是单例设计模式,为什么要使用单例设计模式,如何实现单例设计模式(饿汉式和懒汉式)?...
  7. sqlanyshere转mysql_【SQL】Oracle和Mysql的分页、重复数据查询(limit、rownum、rowid)
  8. python requests 示例_python的requests模块实现登陆示例
  9. import是引进外部函数吗_你必须要知道的Python中的main函数
  10. python生成wheel包注意事项