Python——多进程
进程的实例
# -*- coding:UTF-8 -*-
import os
import time
from multiprocessing import Process #进程
def func(args,args2): #对应下面的参数1,参数2
print(args,args2)
print(54321)
time.sleep(1)
print('子进程:',os.getpid())
print('子进程的父进程:',os.getpid())
print(12345) if __name__ == '__main__':
p = Process(target = func,args=('参数1','参数2') # 进程注册,p是一个进程对象、
p.start() #启动一个子进程,操作系统创建进程
print('*'*10)
print('父进程:',os.getpid())
print('父进程的父进程:',os.getpid())
进程实例
多进程的方法
1、join() #是感知一个子进程的结束
# -*- coding:UTF-8 -*-
import time
from multiprocessing import Process #进程
def func(arg1,arg2):
print('*'*arg1)
time.sleep(1)
print('*'*arg2) if __name__ = '__main__':
p = Process(target=func,args(10,20))
p.start()
p.join() #是感知一个子进程的结束
print('===========:运行完了
实例
2、开启多个子进程
# -*- coding:UTF-8 -*-
import time
from multiprocessing import Process #进程
def func(arg1,arg2):
print('*'*arg1)
time.sleep(1)
print('*'*arg2) if __name__ = '__main__':
p_lst = []
for i in rang(10): #同时启用10个进程
p = Process(target=func,args(10*i,20*i))
p_lst.append(p) #将所有进程加入进程列表
p.start()
[p.join() for p in p_lst] #结束每一个子进程
print('===========:运行完了
实例
方法2:面向对象的方法
(1)自定义类,继承Process类
(2)必须实现一个run的方法,run方法是在子进程中执行的代码
from multiprocessing import Process #进程
class MyProcess(Porcess):
def run(self):
print(self.pid)
print(self.name)
print(os.getpid()) if __name__ = '__main__':
print('主进程的id:',os.getpid())
p1 = MyProcess()
p1.start()
p2 = MyProcess()
p2.start()
实例
传参数
import os
from multiprocessing import Process #进程
class MyProcess(Porcess):
def __init__(self,arg1,arg2):
super().__init__()
self.arg1 = arg1
self.arg2 = arg2 def run(self):
print(self.pid)
print(self.name)
print(os.getpid())
print(self.arg1)
print(self.arg2) if __name__ = '__main__':
print('主进程的id:',os.getpid())
p1 = MyProcess(1,2)
p1.start()
p2 = MyProcess(3,4)
p2.start()
实例
3、使用多进程实现socket服务(tcp协议)
import socket sk = socket.socket()
sk.connect(('127.0.0.1',8080))
msg = sk.recv(1024).decode('utf-8')
print(msg)
msg2 = input('>>>').encode('utf-8')
sk.send(msg2)
sk.close()
客户端
import socket
from multiprocessing import Process
def serve(conn):
ret = '你好'.encode('utf-8')
conn.send(ret)
msg = conn.recv(1024).decode('utf-8')
print(msg)
conn.close() if __name__ == '__main__' :
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listen()
try:
while True:
conn,addr = sk.accept()
p = Process(target=serve,args=(conn,))
p.start()
finally:
sk.close()
服务端
4、守护进程
子进程——转换——守护进程
# 子进程 -- > 守护进程
import time
from multiprocessing import Process def func():
while True:
time.sleep(0.2)
print('我还活着') def func2():
print('in func2 start')
time.sleep(8)
print('in func2 finished') if __name__ == '__main__':
p = Process(target=func)
p.daemon = True # 设置子进程为守护进程
p.start()
p2 = Process(target=func2)
p2.start()
p2.terminate() # 结束一个子进程
time.sleep(1)
print(p2.is_alive()) # 检验一个进程是否还活着
print(p2.name)
# i = 0
# while i<5:
# print('我是socket server')
# time.sleep(1)
# i+=1 # 守护进程 会 随着 主进程的代码执行完毕 而 结束
# 在主进程内结束一个子进程 p.terminate()
# 结束一个进程不是在执行方法之后立即生效,需要一个操作系统响应的过程
# 检验一个进程是否活着的状态 p.is_alive()
# p.name p.pid 这个进程的名字和进程号
实例
5、进程锁
# 锁 # 火车票
import json
import time
from multiprocessing import Process
from multiprocessing import Lock # def show(i):
# with open('ticket') as f:
# dic = json.load(f)
# print('余票: %s'%dic['ticket']) def buy_ticket(i,lock):
lock.acquire() #拿钥匙进门
with open('ticket') as f:
dic = json.load(f)
time.sleep(0.1)
if dic['ticket'] > 0 :
dic['ticket'] -= 1
print('\033[32m%s买到票了\033[0m'%i)
else:
print('\033[31m%s没买到票\033[0m'%i)
time.sleep(0.1)
with open('ticket','w') as f:
json.dump(dic,f)
lock.release() # 还钥匙 if __name__ == '__main__':
# for i in range(10):
# p = Process(target=show,args=(i,))
# p.start()
lock = Lock()
for i in range(10):
p = Process(target=buy_ticket, args=(i,lock))
p.start()
实例
Python——多进程的更多相关文章
- Python多进程编程
转自:Python多进程编程 阅读目录 1. Process 2. Lock 3. Semaphore 4. Event 5. Queue 6. Pipe 7. Pool 序. multiproces ...
- Python多进程(1)——subprocess与Popen()
Python多进程方面涉及的模块主要包括: subprocess:可以在当前程序中执行其他程序或命令: mmap:提供一种基于内存的进程间通信机制: multiprocessing:提供支持多处理器技 ...
- Python多进程使用
[Python之旅]第六篇(六):Python多进程使用 香飘叶子 2016-05-10 10:57:50 浏览190 评论0 python 多进程 多进程通信 摘要: 关于进程与线程的对比, ...
- python多进程断点续传分片下载器
python多进程断点续传分片下载器 标签:python 下载器 多进程 因为爬虫要用到下载器,但是直接用urllib下载很慢,所以找了很久终于找到一个让我欣喜的下载器.他能够断点续传分片下载,极大提 ...
- Python多进程multiprocessing使用示例
mutilprocess简介 像线程一样管理进程,这个是mutilprocess的核心,他与threading很是相像,对多核CPU的利用率会比threading好的多. import multipr ...
- Python多进程并发(multiprocessing)用法实例详解
http://www.jb51.net/article/67116.htm 本文实例讲述了Python多进程并发(multiprocessing)用法.分享给大家供大家参考.具体分析如下: 由于Pyt ...
- python 多进程开发与多线程开发
转自: http://tchuairen.blog.51cto.com/3848118/1720965 博文作者参考的博文: 博文1 博文2 我们先来了解什么是进程? 程序并不能单独运行,只有将程 ...
- Python多进程----从入门到放弃
Python多进程 (所有只写如何起多进程跑数据,多进程数据汇总处理不提的都是耍流氓,恩,就这么任性) (1)进程间数据问题,因为多进程是完全copy出的子进程,具有独立的单元,数据存储就是问题了 ( ...
- day-4 python多进程编程知识点汇总
1. python多进程简介 由于Python设计的限制(我说的是咱们常用的CPython).最多只能用满1个CPU核心.Python提供了非常好用的多进程包multiprocessing,他提供了一 ...
- python 多进程 logging:ConcurrentLogHandler
python 多进程 logging:ConcurrentLogHandler python的logging模块RotatingFileHandler仅仅是线程安全的,如果多进程多线程使用,推荐 Co ...
随机推荐
- 1-Android开发验证码(使用第三方Mob,注册)
http://www.mob.com/ 注册以后 可以直接放在 可以下载到手机里面试一下了 后续就不截图了 补充: 自定义签名
- bat无故报错打印混乱的解决
1. 下面语句加了一个无意义的ping操作.不加的时候经常报错,报操作数不是数字,实际上打印发现NOW值和格式并没有错误.怀疑是下面操作数太多了,而执行速度又太快,导致执行时总是很容易出错.通过增加一 ...
- sql server2016里面的json功能 - 转
测试一下基本的,从查询结果里面构造一个json 的格式 create table t1(ID int identity,name nvarchar(50),Chinese int ,Math int) ...
- (一)在 Blend 中绘制形状和路径
原文:(一)在 Blend 中绘制形状和路径 https://docs.microsoft.com/zh-cn/previous-versions/jj170881(v=vs.120) 在 Blend ...
- [python][spark]wholeTextFiles 读入多个文件的例子
$pwd /home/training/mydir $cat file1.json {"firstName":"Fred", "lastName&qu ...
- 【php增删改查实例】第十九节 - session的使用: 让服务器知道你是谁?
因为HTTP请求是一种无状态的请求,所谓无状态,就是服务器不会记录下你本次请求的信息.http它是基于请求 - 相应模式的一种数据传输协议.就是说,你发送一个请求,我服务器给你一个响应,这件事情就算完 ...
- Python 学习 第九篇:模块
模块是把程序代码和数据封装的Python文件,也就是说,每一个以扩展名py结尾的Python源代码文件都是一个模块.每一个模块文件就是一个独立的命名空间,用于封装顶层变量名:在一个模块文件的顶层定义的 ...
- (8)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- Ocelot网关(Api GateWay)
说到现在现有微服务的几点不足: 1) 对于在微服务体系中.和 Consul 通讯的微服务来讲,使用服务名即可访问.但是对于手 机.web 端等外部访问者仍然需要和 N 多服务器交互,需要记忆他们的服务 ...
- JAVA CAS原理浅谈
java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包.可见CAS的重要性. CAS CAS:Compare and Swap, 翻译成比较并交换. java.uti ...
- Educational Codeforces Round 49 (Rated for Div. 2)A到C题
A题意 给你t表示有t组测试数据,每组数据给你一个含小写字母的字符串,每个字符必须变为它相邻的字符,问最后是否能变成回文串.a不能变成z,反过来也不行 分析 只需对对称位置判断差是否小于2且不等于1, ...