import os
from multiprocessing import Process
import time
def func(args,args2):
print(args,args2)
time.sleep(1)
print('子进程:',os.getpid())
print('子进程的父进程:',os.getppid()) #查看当前进程的父进程号 print(12345)
if __name__ == '__main__':
p = Process(target=func,args=('参数1','参数2')) #注册 #p是一个进程对象 主进程
p.start() #启动一个子进程
print('*'*10)
print('父进程:',os.getpid()) #查看当前进程的进程号
print('父进程的父进程:',os.getppid()) #查看当前进程的父进程号
#进程的生命周期
# 主进程
# 子进程
# 开启了子进程的主进程:自己代码长,等待自己的代码执行结束
# 子进程的执行时间长,主进程会在主进程代码执行完毕之后等待子进程执行完毕之后,主进程才结束
from multiprocessing import Process
import time
def func(arg1,arg2):
time.sleep(1)
print('*'*arg2)
if __name__ == '__main__':
p_lst = []
for i in range(10):
p = Process(target=func,args=(10*i,20*i))
p.start()
p_lst.append(p)
[p.join() for p in p_lst]
print('运行完了')

多进程创建多个文件

from multiprocessing import Process
import time,os
def func(filename,content):
with open(filename,'w') as f:
f.write(content*10*'*')
if __name__ == '__main__':
p_lst = []
for i in range(5):
p = Process(target=func,args=('info%s'%i,i))
p_lst.append(p)
p.start()
[p.join() for p in p_lst]
print('运行完了')
print([i for i in os.walk(r'D:\Python\PY\9python\py9-day36--多进程及进程锁')])
开启多进程的第二种方式
自定义类 继承Process类
必须实现一个run方法,run方法中是在子进程中执行的代码
import os
from multiprocessing import Process
class MyProcess(Process):
def run(self):
print(os.getpid())
if __name__ == '__main__':
print('主:',os.getpid())
p1 = MyProcess()
p1.start()
p2 = MyProcess()
p2.start()

多进程socket实现

#server
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()
while True:
conn,addr = sk.accept()
p =Process(target=serve,args=(conn,))
p.start()
sk.close() #client
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()

守护进程

from multiprocessing import Process
import time
def func():
while True:
time.sleep(0.1)
print('我还活着') if __name__ == '__main__':
p = Process(target=func)
p.daemon = True #设置子进程为守护进程
p.start()
i = 0
while i<5:
print('我是一个socket server')
time.sleep(1)
i+=1 #守护进程会随着主进程的代码执行完毕而结束

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()

Python9-进程-day36的更多相关文章

  1. 进程 day36

    python之路——进程   阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 在python程序中的进程操作 multipro ...

  2. day36——死锁、递归锁、信号量、GIL、多线程实现socket通信、线程池和进程池

    day36 死锁现象与递归锁 死锁现象 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这 ...

  3. python--9、进程池

    concurrent.futures模块 进程池中的进程是固定的,若是池中有任务结束后,等待的任务进来后由空闲的进程来处理. 导入方法三连发: from 标题的模块 import 如下:Process ...

  4. python--9、进程及并发知识

    进程 一个文件的正在执行.运行过程就成为一个进程.执行多个程序,把程序文件都加载到内存,并且多个程序的内存空间隔离--空间上的复用. 遇到IO等待,切CPU到别的程序,提升效率.没有IO,一个程序占用 ...

  5. python并发_进程_multiprocessing

    多进程基础, 主要是用了 multiprocessing模块 : 在一个python进程中开启子进程,start方法和并发效果. import time from multiprocessing im ...

  6. 进程间的通讯————IPC

    """ IPC 指的是进程间通讯 之所以开启子进程 肯定需要它帮我们完成任务 很多情况下 需要将数据返回给父进程 然而 进程内存是物理隔离的 解决方案: 1.将共享数据放 ...

  7. day36 爬虫+http请求+高性能

    爬虫 参考博客:http://www.cnblogs.com/wupeiqi/articles/5354900.html http://www.cnblogs.com/wupeiqi/articles ...

  8. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  10. 使用Monit监控本地进程

    目前用它监控某些服务,失败自动重启,同时监控特定的日志文件,如果有变化,就发邮件报警 安装不细写了,网上好多 我先用cat /proc/version看了下我的系统是el6的,于是wget http: ...

随机推荐

  1. 自动化测试资源(二):火狐浏览器驱动 geckodriver

    geckodriver:https://github.com/mozilla/geckodriver geckodriver 历史版本下载列表:https://github.com/mozilla/g ...

  2. 【Oracle】OVER(PARTITION BY)函数用法

    http://blog.itpub.net/10159839/viewspace-254449/ ................................ OVER(PARTITION BY) ...

  3. docker 的目录问题

    今天在使用Dockerfile制作镜像的时候,使用命令 :COPY aaa.sql /usr/test 下时, 总是报错 “INFO[0001] stat /var/lib/docker/aufs/m ...

  4. 语义分割丨PSPNet源码解析「测试阶段」

    引言 本文接着上一篇语义分割丨PSPNet源码解析「网络训练」,继续介绍语义分割的测试阶段. 模型训练完成后,以什么样的策略来进行测试也非常重要. 一般来说模型测试分为单尺度single scale和 ...

  5. docker安装软件

    镜像相关命令 1.搜索镜像 # docker search java 可使用 docker search命令搜索存放在 Docker Hub(这是docker官方提供的存放所有docker镜像软件的地 ...

  6. 09SpringAopAdvice

    Spring原生的经典模式 实现 AOP 通知: 前置通知:在目标方法执行之前执行,不能改变方法的执行流程和结果! 实现 MethodBeforeAdvice接口! 后置通知:在目标方法执行之后执行, ...

  7. 用户 'IIS APPPOOL\**' 登录失败的解决方案(项目部署到本地IIS上打开网页出现报错)

    为开发方便-将项目部署到本地IIS上打开网页出现报错 1.打开IIS管理 2.点击应用池 3.找到你部署的网站名,右键“高级设置”——>“进程模型”——>“标识”修改为localsyste ...

  8. 【踩坑】spring每次请求后session不一样导致无法在服务器保存信息

    根据网上的资料,若想在服务器用session保存一些信息,方法如下: public Xclass Xmethod(HttpServletRequest request, HttpSession ses ...

  9. 如何检查linux 下是否安装java(jdk)环境

    大家可通过下面五条命令来查看linux 系统是否安装了java 环境 1.java -version 2.which java 3.rpm -qa |grep java 4.echo $PATH 5. ...

  10. JSON(未完待续,等讲到对象时再加)

    1 定义 JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Jav ...