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 ...
随机推荐
- MATLAB——BP神经网络
1.使用误差反向传播(error back propagation )的网络就叫BP神经网络 2.BP网络的特点: 1)网络由多层构成,层与层之间全连接,同一层之间的神经元无连接 . 2)BP网络的传 ...
- <<Linux kernel development>> Process Management
The Process On modern operating systems,processes provide two virtualizations:a virtualized processo ...
- Skyline 二次实现单体化模型选择查询示例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...
- 如何修改Oracle服务IP地址
oracle数据库所在的机器更改IP地址后,发现无法连接,解决这个问题,需要修改一下对应的文件: F:\app\zhaohe\product\11.2.0\dbhome_1\NETWORK\ADMIN ...
- [拍摄]日本AVENIR 6-36mm老式变焦镜头拆解 型号SSL06036M
老式监控摄像头的变焦镜头,做工不错,拆了分享一下 品牌:AVENIR型号:SSL06036M光圈:1:1.2产地:日本焦距:6-36mm 外观 图片:QQ截图20141104125759.jpg 图片 ...
- ASP.NET Core StaticFiles中间件修改wwwroot(转载)
ASP.NET Core 开发,中间件(StaticFiles)的使用,我们开发一款简易的静态文件服务器.告别需要使用文件,又需要安装一个web服务器.现在随时随地打开程序即可使用,跨平台,方便快捷. ...
- ElasticSearch5.5.1插件分类
ElasticSearch5.5.1插件分类 附官网介绍:https://www.elastic.co/guide/en/elasticsearch/plugins/5.5/intro.html 一. ...
- Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇
由于来源身份不明.越权操作.密码泄露.数据被窃.违规操作等因素都可能会使运营的业务系统面临严重威胁,一旦发生事故,如果不能快速定位事故原因,运维人员往往就会背黑锅.几种常见的运维人员背黑锅场景:1)由 ...
- Git版本控制器使用总结性梳理
Git为何物?Git 是什么?大家肯定会说不就是版本控制器嘛,是的Git是目前世界上最先进的分布式版本控制系统(没有之一).1)那什么是版本控制器?举个简单的例子,比如我们用Word写文章,那你一定有 ...
- 在Mac终端显示 Git 当前所在分支
1.进入你的home目录 cd ~ 2.编辑.bashrc文件 vi .bashrc 3.将下面的代码加入到文件的最后处 function git_branch { branch="`git ...