一、多进程应用

import socket
from multiprocessing import Process def 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): # 10s
time.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 Process def 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 Process def 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 get
4.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()

python:进程操作的更多相关文章

  1. 在Python程序中的进程操作,multiprocess.Process模块

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

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

    multiprocess模块 multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所 ...

  3. python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)

    昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...

  4. [ python ] 进程的操作

    目录 (见右侧目录栏导航)- 1. 前言- 2. multiprocess模块- 2.1 multiprocess.Process模块    - 2.2 使用Process模块创建进程    - 2. ...

  5. python进程与线程的操作

    进程操作: # project :Python_Script # -*- coding = UTF-8 -*- # Autohr :XingHeYang # File :processTest.py ...

  6. Python程序中的进程操作-开启多进程(multiprocess.process)

    目录 一.multiprocess模块 二.multiprocess.process模块 三.process模块介绍 3.1 方法介绍 3.2 属性介绍 3.3 在windows中使用process模 ...

  7. 29、Python程序中的进程操作(multiprocess.process)

    一.multiprocess模块 multiprocess不是一个模块而是python中一个操作.管理进程的包. 子模块分为四个部分: 创建进程部分 进程同步部分 进程池部分 进程之间数据共享 二.m ...

  8. 第十五章、python中的进程操作-开启多进程

    目录 第十五章.python中的进程操作-开启多进程 一.multprocess模块 二.multprocess.process模块 三.Process()对象方法介绍 四.Process()对象属性 ...

  9. Python程序中的进程操作--—--开启多进程

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

  10. python进程、线程、协程(转载)

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

随机推荐

  1. git撤销commit,但未git push的命令

    在git push的时候,有时候我们会想办法撤销git commit的内容 1.找到之前提交的git commit的id git log 找到想要撤销的id 2.git reset –hard id ...

  2. TCP协议三次握手、四次挥手过程

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数 ...

  3. 0前端 框架 库_千万别去碰js呀 混合APP_webAPP_美工 选有类型的语言,比如TypeScript

    常用知识点,技巧 添加库到本地: (举例 element-ui) 用npm命令行把包下载到本地 在电脑里找到资源文件,比如 C:\Users\XiaoCong\AppData\Roaming\npm\ ...

  4. (Frontend Newbie)Web简史

    前段时间在微博上看到有人问,前端这几年发展这么迅猛,各种新技术.新框架层出不穷,我们究竟怎么学习这些新技术才能跟得上脚步,毕竟精力有限,逐个学习不现实.个人认为,没有太大的必要去追逐那些新潮的技术.原 ...

  5. Coursera 机器学习 第5章 Neural Networks: Learning 学习笔记

    5.1节 Cost Function神经网络的代价函数. 上图回顾神经网络中的一些概念: L  神经网络的总层数. sl  第l层的单元数量(不包括偏差单元). 2类分类问题:二元分类和多元分类. 上 ...

  6. 使用 GitHub API 进行数据分析 (Node.js)

    使用 GitHub API 进行数据分析 (Node.js) Node.js 的访问 GitHub 的 API 库,通过 npm 或者 yarn 安装: yarn add github-api 官方示 ...

  7. oracle 报错:ORA-02019 未找到数据库的连接说明

    一.问题描述 我之前连的是别的数据库,现在更换了数据库的连接,然后就报了如下的错误: 我使用的是NHibernate,我找到映射文件后发现我用了dblink,代码中table="COM_OR ...

  8. C#请求http post和get

    首先先要感谢博主小伟地方提供的博客,让我解决了问题. 同样是先提问题,我们要请求http干什么? 通过请求http,传入我的参数,我希望能够获取到项目里面的某些数据,比如这里,我们需要得到SceneL ...

  9. node.js异步编程解决方案之Promise用法

    node.js异步编程解决方案之Promise var dbBase = require('../db/db_base'); var school_info_db = require('../db/s ...

  10. MyBatis 中 sqlmapconfig核心标签typeAliases配置说明

    标签说明 在 MyBatis 的 sql 映射配置文件中,需要使用 paramterType.resultType 来设置 sql 语句的输入输出参数,一般参数都是基本的数据类型或封装类型,但都需要声 ...