上午:

# 1 开启子进程
#target
#args
# if __name__ == '__main__'
#start()
# 2.其它的方法:
#方法:
#terminate()
#is_alive()
#属性
#pid
#name
# 3. 开启多个子进程
# 4.join
#阻塞等待一个子进程结束
#阻塞等待多个子进程结束
#5. 守护进程 #6.面向对象的方式实现多进程

1内容回顾

#__author : 'liuyang'
#date : 2019/4/15 0015 上午 9:12
# io输入 :输入到内存
# 输出 : 从内存中输出到硬盘 # 操作系统
#单道
#多道
#分时
#并发和并行
#多个程序在一个cpu上交替 运行
#在多个cpu上多个程序 #快 # 阻塞和非阻塞
#在工作 :非阻塞 # 同步和异步
#调用一个程序,需要等待这个任务执行完后并返回结果,现在的代码才能运行
#掉一个任务,不关系这个任务是否完成,只负责调用,余下的内容 # 进程和程序
# 正在执行的程序
#统进行资源分配和调度的基本单位
#多个进程之间的数据相互隔离
# pid唯一标识 可变 另次运行 #进程的创建 和结束
#系统初始化
# 子进程
#交互式请求
# 结束: 正常退出
# 出错退出:自愿(自己设计的)
#严重错误:
#杀死了一个子进程 # 进程的调度
#先来先服务
#短作业优先
#分时/多道(遇到IO把cpu让出来)
#多级反馈队列
# 先 短 分 都有 尤其是短,因为短作业第一优先就执行
# 第一级 时间短 执行不完的被下放
#但是 下面的优先级低 执行时间长 #比较合理 # 阻塞 是 干别的事吗? # 登录
# input()
# input()
# 判断用户名密码 # 不在第一优先级了 因为被阻塞 占了
import sys
print(sys.argv)
if sys.argv[1] == 'aa' and sys.argv[2] =='aaa':
print('登陆成功')
# 把放在一个列表中 类似于 *args
# 启动的同时 把用户名和密码放进去

2.今日内容

# 使用模块
# multiprocessing 一个多元化的进程模块
# multiple 多元化 processing 进程
#涵盖了和进程相关的几乎 所有的内容
#process 类 帮助你启动\停止进程
# Lock 类 锁
# Queue 类

3.process类的使用

#__author : 'liuyang'
#date : 2019/4/15 0015 上午 10:12
import time
import os
# def func(i):
# time.sleep(1)
# print(i,os.getpid())
# print('主:',os.getpid())
#
# func(0)
# func(1)
# func(2)
# # 同步 执行完 0 再1 再 2
# 2 .使用process 穿件一个类
'''
from multiprocessing import Process # 包 #类包 大写
def func( ):
time.sleep(1)
print(0,os.getpid(),os.getppid())# pid processid ppid:parent process id # Processs 进程类
if __name__ == '__main__': #多进程 是因为这里 多个操作一个文件
# windows 操作系统下开启子进程,子进程中的代码是通过import 这种方式被导入到子进程中的
# 要想不一直 循环父创子 子创子 都放到if 判断里
# mac,linux 是 copy到这来的 不需要if
Process(target=func).start()
Process(target=func).start()
Process(target=func).start() #异步 不影响别的执行
# func的参数怎么传递
# func 不能 + 括号 加括号立刻执行 print(func())
'''
# 怎么证明是多个进程 # 几个概念
#子进程 #互不干扰
#父进程
#主进程 :run的是主 同时也是父进程 # if __name__ = '__mian__' #和进程原本没有关系
'''
def func(a,b,c):
time.sleep(1)
print(a,b,c,os.getpid()) print('主:',os.getpid()) # 传参 #还没开启进程(没隔离)中就已经加入 所以可以传参
from multiprocessing import Process # 包 #类包 大写
if __name__ == '__main__':
Process(target=func,args=(1,2,3)).start() # 1、func的返回值能返回到父进程中么? 不行 进程开启后隔离了
#进程之间数据隔离,所以子进程中的返回值父进程获取不到 # 异步的现象
# Process 进程类
if __name__ == '__main__':
p = Process(target=func,args=(1,2,3))
p.start() #p是一个进程操作符 #操作系统有空的时候开始
print(p.is_alive())
p.terminate() #终止结束一个进程
# 异步非阻塞模型 各干各的 不等待 干完了就干
# 操作系统有空的时候结束
print(p.is_alive())
time.sleep(0.1)
print(p.is_alive())
print(p.name,p.pid) #Process-2 8488 #名字随机分布的 if __name__ == '__main__':
for i in range(1,4):
Process(target=func, args=(i,i+1,i+2)).start() # 2. process类
# 3.进程中的其它方法
# 4.如何开启多个子进程
from multiprocessing import Process
import random
def send_mail(name): time.sleep(random.uniform(1,3))
print('已经给%s发送邮件完毕'%name)
if __name__ =='__main__':
lst = ['liu','wang','zhang']
# 阻塞等在 子进程结束之后
p_l = []
for name in lst :
p = Process(target=send_mail , args=(name,)) #必须元组
p.start() #异步非阻塞 #发信息需要时间
# 这样缩进同步了
#p.join() #这样阻塞,直到p对应的进程结束之后才结束阻塞 #这个思路以后会经常的用到在以后
#现在不着急用, 都执行完了 每个都用 先加入 列表中
p_l.append(p) for p in p_l : p.join() # 执行完了没有 ,每一个进程分别join
print('所有的信息发送完毕了') #然后这里就抽空执行了 # '''
# 所有的信息发送完毕了
# 已经给wang发送邮件完毕
# 已经给liu发送邮件完毕
# 已经给zhang发送邮件完毕'''
# 同时发 并发 效率
# '''
#守护进程 #主进程结束 守护进程也结束 然后子进程结束
import time
from multiprocessing import Process
def func():
# while True:
for i in range(20):
time.sleep(0.5)
print('in func')
def func2():
print('start: func2')
time.sleep(5)
print('end: func2') if __name__ == '__main__':
p = Process(target=func) p.daemon = True #表示设置p为一个守护进程
p.start() #结束主代码,结束 不管子进程
p2 = Process(target=func2)
p2.start()
print('in main')
time.sleep(3)
print('finished')
# p2.join() # 这样可以 子进程 。阻塞在这 可以等到子进程也结束 # name 里的 func()里的
# 主进程 和 子进程互不干扰
# 主进程执行完毕之后 , 会等到所有子进程结束之后
# 为什么
# 父进程要负责回收子进程的 系统资源 防止一直占用 #守护进程:
#是一个子进程,守护的是主进程
#结束条件:主进程的代码结束,(主进程结束,代码还没结束,等待着子进程收尸),守护进程也结束
# 因为守护进程也是子进程(要被主进程回收),所以没法守护到主进程完全结束 # 进程
#主进程的代码结束,守护进程结束
#主进程要挥手进程(子进程)的资源
#等待其他所有子进程结束
#主进程回收所有子进程的资源 # 迭代器生成器(把变量删掉,是内存中的资源,不操作系统) 内存中的数据 资源 都不需要回收 垃圾回收机制
#内存中的这个变量 join 自己程序的级别里
#操作系统 程序里 不能删掉这个变量
# 但是操作系统的资源的 进程
#需要主进程来回收

4  和 5 的 __name__

#__author : 'liuyang'
#date : 2019/4/15 0015 上午 10:43
import name_demo
# print()
# 'name_demo': <module 'name_demo' from 'D:\\Python\\S20\\day32\\name_demo.py'>
#

4__name__

#__author : 'liuyang'
#date : 2019/4/15 0015 上午 10:41
# print(__file__) #内置文件中的变量
# print(__all__) # 列表里写啥 ,就可以显示啥 print([__name__]) #['__main__'] # 看当前这句话是怎么被执行的
#1. 右键直接执行 [__name__] = ['__main__']
#2. 导入这个模块执行 [__name__]= ['name_demo']
# 变量 sys.modules[__name__] 太棒了 联系
import sys
print(sys.modules)
# sys.modules[__name__]
#<module '__main__' from 'D:/Python/S20/day32/name_demo.py'>,
#用name 找到文件了
#执行的任意一个文件 name 都是 __main__
#但是被别人导入了 name 就变成了导入的文件的名字了 def func():
print('in func') if __name__ == '__main__':
func() #写的所有代码是不希望这个文件作为模块被导入的时候执行的代码

5 name_demo

6.  面向对象的多线程

#__author : 'liuyang'
#date : 2019/4/15 0015 下午 12:23
# 1 开启子进程
#target
#args
# if __name__ == '__main__'
#start()
# 2.其它的方法:
#方法:
#terminate()
#is_alive()
#属性
#pid
#name
# 3. 开启多个子进程
# 4.join
#阻塞等待一个子进程结束
#阻塞等待多个子进程结束
#5. 守护进程 #6.面向对象的方式实现多进程
import os
from multiprocessing import Process
class MyProcess(Process):
def __init__(self,a,b):
super().__init__()
self.a = a
self.b = b
def run(self): #希望在子进程中执行的代码就放到run方法中
print(os.getpid(),self.a ,self.b) #在这里写 # def start(self): # 希望在子进程中执行的代码就放到run方法中
# print(os.getpid(), self.a, self.b) # 在这里写 # def start(self): #希望在子进程中执行的代码就放到run方法中
# print(os.getpid()) #在这里写 if __name__ == '__main__':
# for i in range(10):
MyProcess(1,2).start() #通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1,2).start()#通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1,2).start()#通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法
MyProcess(1, 2).start() # 通知操作系统开进程,执行run方法 # 明天默写
#0.内容回顾的概念
#1.使用multiprocess 起一个最简单的进程,执行查看子进程的进程id
#2.使用多进程实现socket tcp协议的并发server端
#博客上有答案 # 敏捷编程 每一天都有一个任务 迅速提升 ,就像下象棋
# 不断的推翻自己的代码 数据结构什么的

process类的总结

day32 进程的更多相关文章

  1. day32——进程、操作系统

    day32 进程的基础 程序 一堆静态的代码文件 进程 一个正在运行的程序进程.抽象的概念 被谁运行? 由操作系统操控调用交于CPU运行 ​ 操作系统 管理控制协调计算机中硬件与软件的关系 操作系统的 ...

  2. 22期老男孩Ptython全栈架构师视频教程

    老男孩Ptython全栈架构师视频教程 Python最新整理完整版22期视频教程 超60G课程容量<ignore_js_op> <ignore_js_op> <ignor ...

  3. day32 通道 数据共享 进程池

    1.管道 格式: conn1,conn2 = Pipe() 管道的两端可以进行全双工通信   如图 进程2创建了管道,它就拥有管道两端的信息,每个端点都能收发信息,它把端点信息传给进程1和进程3 ,它 ...

  4. day32 信号量 事件 管道 进程池

    今日主要内容: 1.管道(Pipe) 数据接收一次就没有了 2.事件(Event) 3.基于事件的进程通信 4.信号量(Semaphore) 5. 进程池(重点) 6.进程池的同步方法和异步方法 7. ...

  5. Python开发基础-Day32 进程间通信、进程池、协程

    进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...

  6. 进程理论基础(Day32)

    背景知识 顾名思义,进程即一个软件正在进行的过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老的也是最重要的抽象概念之一.操作系统的其他 ...

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

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

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

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

  9. 使用Monit监控本地进程

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

随机推荐

  1. sys.exit(main(sys.argv[1:]))

    sys.argv sys.argv[]说白了就是一个从程序外部获取参数的桥梁. 首先我们需要import sys,sys是python3的一个标准库,也就是一个官方的模块.封装了一些系统的信息和接口, ...

  2. C# 构造函数中base和this的使用。

    使用base时,首先给父类中的构造函数赋值. 使用this时,先调用父类无参构造函数,再调用自身其他构造函数并对其赋值,最后调用自身当前构造函数.

  3. qt学习001之运行对话框

    使用QT实现Window下运行对话框 1.摆放控件 首先设置并摆放相应的对话框控件,并更改相应名称:        2.实现功能 1)在文本框中输入信息后,点击确定或回车可以运行系统中相应的程序: 点 ...

  4. Java源码分析:关于 HashMap 1.8 的重大更新(转载)

    http://blog.csdn.net/carson_ho/article/details/79373134 前言 HashMap 在 Java 和 Android 开发中非常常见 而HashMap ...

  5. eclipse/idea远程调试Linux程序

    第一步.在Tomcat的bin目录下的startup.sh文件的倒数第二行增加“JPDA_ADDRESS=8787”,最后一行在start的前边增加“jpda”,之后重启Tomcat 第二步.配置Ec ...

  6. 其它 搭建https服务器

    原因是这样的,做了个淘宝的数据管理系统(仅供自己使用),然后需要淘宝卖家的生意参谋里面的一些数据,比如实时访客,里面有每个用户搜索什么关键字进来的,这些信息. 自己基于CefSharp开发了一个win ...

  7. 冒泡排序 & 选择排序(升序)

    软件工程上老师讲流程图时,要求画冒泡排序和选择排序的流程图--------问题来了,故想基于百度两种排序后,自我总结的写些什么 请将一维数组a[n] 里面的 n个元素  升序排好 ---------- ...

  8. linux学习笔记:关于环境变量

    (摘自https://blog.csdn.net/llzk_/article/details/53813266之后整合) 1.linux系统的条件 Linux是一个多用户的操作系统,每个用户登录系统时 ...

  9. 微信小程序——编辑

    记录一下 微信小程序分页编辑,可增页删除当前页面.第一页为主图片和主句子.其他页面一致. 左滑右滑可切换页面.每页可增加0到1页.小黑点与页面一致. /* pages/booktool/write/w ...

  10. 项目总结22:Java UDP Socket数据的发送和接收

    项目总结22:Java UDP Socket数据的发送和接收 1-先上demo 客户端(发送数据) package com.hs.pretest.udp; import java.io.IOExcep ...