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. NSwag生成客户端调用代码

    NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码 https://www.cnblogs.com/hunanzp/p/9297361.html 前言 上一篇博客中我们 ...

  2. 关于Nginx对于PHP支持的问题

    因为使用的mediawiki是用php写的,所以就遇上了一个问题,怎么让Nginx支持php,记得当时使用apache2的时候是安装了一个叫 “ libapache2-mod-php5 ”的mod , ...

  3. P3290 寻找第K大数

    描述 寻找第K大数 N个小朋友在一起做游戏.每个小朋友在自己的硬纸板上写一个数,然后同时举起来.接着,小y老师提一个问题,看哪个小朋友先抢答出来.问题是:在这N个数中,第K大的是哪个数?请你编程完成. ...

  4. 手动添加日期到mysql数据库

    //获得jsp页面上的数据 String dates=request.getParameter("dates"); //使用预定格式将日期转换为字符串 SimpleDateForm ...

  5. [转]c# 泛类型(泛型) 以及强类型与弱类型的 理解及优化

    [泛型的概念](1)没有泛型的时候,所有的对象都是以object为基础,如果要使用时必须进行强制类型转换,如果对于值类型,则会导致不断拆箱装箱的过程,对系统消耗很大.(2)使用泛型时不需要通过obje ...

  6. 【转】pom.xml讲解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. B/S架构 C/S架构 SOA架构

    一.什么是C/S和B/S 第一.什么是C/S结构.C/S (Client/Server)结构,即大家熟知的客户机和服务器结构.它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配 ...

  8. go语言简单的soap调用方法

    package main import ( "bytes" "encoding/xml" "fmt" "io" &quo ...

  9. 第二章 你第首个Electron应用 | Electron in Action(中译)

    本章主要内容 构建并启动Electron应用 生成package.json,配置成Electron应用 在你的项目中包含预先构建Electron版本 配置package.json以启动主进程 从主进程 ...

  10. 【extjs6学习笔记】1.2 初始:MVC MVVM

    模型 这表示数据层.该模型可以包含数据验证和逻辑来保持数据.在 ext js 中, 大多数模型都与一个数据存储一起使用. 视图 这表示用户界面. 是用户在屏幕上看到的组件. 在每次互动的用户与应用程序 ...