1.内容回顾

2.今日内容

3.创建-进程Process

4.join方法

5.进程之间数据隔离

1.内容回顾

# 进程 :是计算机中最小的资源分配单位
# 进程的三状态 :就绪 运行 阻塞
# 并发和并行 :
  # 并行 :在一个时刻上,有多个进程在被CPU计算
  # 并发 :在一个时间段上,有多个进程在被CPU计算
# 同步异步 :
  # 同步 :一件事情与另一件事情有一定的顺序
  # 异步 :两件事情可以同时进行
# 阻塞和非阻塞:
  # 阻塞 : input sleep recv accept recvfrom
  # 非阻塞 :不需要等待就可以直接完成的事情

2.今日内容

# 进程
# 如何去在python代码中 启动一个进程
# 新的模块 :multiprocessing
# 进程模块 :启动进程、基础的进程信息的获取、管理
# 进程的同步
# 进程之间的数据共享
# 进程之间的通信
# 进程池

3.创建-进程Process

import osimport timefrom multiprocessing import Process# print(os.getpid())  #线程id

def func():    time.sleep(1)    print('hello',os.getpid())

if __name__ == '__main__':    for i in range(10):        Process(target=func).start()  #开启进程    time.sleep(1)    print('hello2',os.getpid())

# 几个概念 :
  # 父进程 :父进程执行的过程中创建了子进程
  # 子进程 :
  # 主进程 :一般我们直接执行的那个程序就是主进程
# 为什么要有if __name__ == '__main__': windows操作系统开启子进程的方式问题
# 如何开启多个子进程  for  while

getppid()  #显示父进程

def func():    time.sleep(1)    print('hello',os.getpid(),os.getppid())

if __name__ == '__main__':    for i in range(3):        p = Process(target=func)        p.start()    time.sleep(1)    print('hello2',os.getpid())

# 如何给子进程传参数 ?

import timefrom multiprocessing import Process

def func(num,name):    print(num,'hello',name)

if __name__ == '__main__':    for i in range(10):        p = Process(target=func,args=(i,'yuan',))  #(,)不能一个元素        p.start()  #非阻塞    print('主进程')

# 子进程可以有返回值么?
  # 不能有返回值
# 因为子进程函数中的返回值无法传递给父进程,因为内存隔离的问题

4.join方法

# 主进程会默认等待子进程结束之后才结束# 父进程要负责回收子进程占用的操作系统资源import timefrom multiprocessing import Process

def wahaha():    time.sleep(3)    print('in wahaha')

if __name__  == '__main__':    Process(target=wahaha()).start()    print('主进程')
import timefrom multiprocessing import Process

def send_mail(n):    time.sleep(0.5)    print('发送邮件%s'%n)

if __name__ == '__main__':    l = []    for i in range(10):        p = Process(target=send_mail,args=(i,))        l.append(p)        p.start()    for p in l:        p.join()  #阻塞到所有子进程执行完    print('所有的邮件都已经发出')

5.进程之间数据隔离

from multiprocessing import Processn = 100def func():    global n    n = n - 1if __name__ == '__main__':    p_lst = []    for i in range(100):        p = Process(target=func)        p.start()        p_lst.append(p)    for p in p_lst:        p.join()    print(n)

day27_python_1124的更多相关文章

随机推荐

  1. 在java中如何处理日期格式问题

    1.最简洁的办法就是在对应的对象中加注解 如下一个例子: @DateTimeFormat(pattern="yyyy-MM-dd") @JsonFormat(pattern=&qu ...

  2. golang获取u盘序列号(通过读取注册表实现)

    仅供参考 package main import ( "fmt" "log" "os" "strconv" " ...

  3. Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

    Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 今天发一篇”水文”,可能很多读者都会表示不理解,不过我想把它作为并发序列文章中不可缺少的一块来介绍.本来以为花不了 ...

  4. 一步步学会用docker部署应用(nodejs版)

    一步步学会用docker部署应用 docker是一种虚拟化技术,可以在内核层隔离资源.因此对于上层应用而言,采用docker技术可以达到类似于虚拟机的沙盒环境.这大大简化了应用部署,让运维人员无需陷入 ...

  5. 将项目添加到服务上时报web modules的错误

    将项目添加到服务上时报web modules的错误如下图: 这是tomcat的版本和web modules的版本不支持造成的,如果在如下地方修改不了: 这时候就要在项目的根目录修改如下图: 用工具打开 ...

  6. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

  7. 提高组noip2015

    一道二分答案裸题,一道dp,一道各种裸题的混合(树上差分+二分答案+LCA) stone: 二分查找裸题啊: int check(int x) { ,last=; ;i<=n;i++) if(a ...

  8. 机器学习实战(笔记)------------KNN算法

    1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例:         假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...

  9. 十个经典的Python面试题

    1.Python下多线程的限制以及多进程中传递参数的方式 Python多线程有个全局解释器锁,这个锁的意思是任一时间只能有一个线程运用解释器.并发不是并行. 多进程间同享数据,能够运用multipro ...

  10. Polly 重试策略

    工作原理 Retry 基本重试: public static void Retry() { var random = new Random(); // Policy<> 泛型定义返回值类型 ...