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 ...
随机推荐
- day89
跨域问题 同源策略(Same origin policy) 是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上 ...
- day85
频率校验 源码分析 声明:基于rest_framework的频率校验 1.首先我们进入到APIView下的dispatch,因为由此方法开始分发的 2.可以看到dispatch方法下有一个initia ...
- 你真的会python嘛?
前言 我这个博客一直都是一些技术分享,show code的地方,我从来没有写过个人生活或者情感杂谈,当然我也从来没有谈论过我对什么东西的喜恶. 很多人喜欢喷XX语言,喜欢谈论XX和YY的优缺,甚至凑了 ...
- eclipse调试断点【转载】
该片博文是转载他人的博客,原博客地址:http://blog.csdn.net/maritimesun/article/details/7815903 作为开发人员,掌握开发环境下的调试技巧十分有必要 ...
- Luogu2469 SDOI2010 星际竞速 费用流
传送门 发现它的本质是求一个费用最小的路径覆盖 最小路径覆盖是网络流23题中的一个比较典型的模型 所以考虑相似的建边 因为每一个点要恰好经过一次,是一个有上下界的网络流,故拆点,星球\(i\)拆成\( ...
- Luogu1979 NOIP2013D2T3 华容道 搜索、最短路
题目传送门 题意:给出一个$N \times M$的棋盘,棋盘上有一些块可以移动,有一些块无法移动.$Q$次询问,每一次询问给出三个块$a,b,c$,将$a$块变为空格,空格旁边可移动的块可以与空格交 ...
- linux svn代码回滚命令
取消对代码的修改分为两种情况: 第一种情况:改动没有被提交(commit). 这种情况下,使用svn revert就能取消之前的修改. svn revert用法如下: # svn revert [-R ...
- javascript调用ActiveX接口失败的解决方案及使用心得
前段时间公司做了个比较大的项目,需要用到ocx控件,我厂大部分项目都采用C#.net,而winform程序条用ocx控件接口是相对简单的,但是javascript调用ocx接口,却和winform的用 ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--控制器的声明定义和发现篇(3/8)
文章目录 前情概要 前面文章把路由已经介绍的差不多了,包括url映射,路由选择等.接下来讲一讲controller的一些基本规则 BaseController的所有代码都在这里拉.相当简单. 主要逻辑 ...
- Ionic2 下处理 Android 设备下返回按钮的事件
原文发表于我的技术博客 本文分享了 Ionic2 下处理 Android 设备下返回按钮的事件,供参考. 原文发表于我的技术博客 代码中我分享了如何捕捉 Ionic2 项目在 Android 设备下返 ...