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. mySQL简单操作(一)

    推荐学习网站(https://sqlzoo.net/wiki/SQL_Tutorial) 1.创建mSQL数据表(表名,表字段名,定义表字段) create table tbl_name [if no ...

  2. springboot整合mybatis(使用MyBatis Generator)

    引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> ...

  3. 第十六节 BOM基础

    打开.关闭窗口 open:蓝色理想运行代码功能 <button onclick="window.open('http://www.baidu.com')">打开窗口&l ...

  4. 安卓入门——————简单记账本的开发(二)-点击listview跳转并实现数据的更新

    前言:   这个博客主要实现listview的跳转并实现对数据库内容的更新并显示到listview上,还没有实现listview的实时更新和listview具体线条的添加(接下来的几篇博客会实现),如 ...

  5. JavaScript实现自定义日期时间

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JSP页面静态包含和动态包含的区别与联系

    ---恢复内容开始--- JSP页面静态包含和动态包含的区别与联系: 1.<%@ include file=" " %> 是指令元素,<jsp:include p ...

  7. Python-王者荣耀自动刷金币+爬取英雄信息+图片

    前提:本文主要功能是 1.用python代刷王者荣耀金币 2.爬取英雄信息 3.爬取王者荣耀图片之类的. (全部免费附加源代码) 思路:第一个功能是在基于去年自动刷跳一跳python代码上面弄的,思路 ...

  8. web性能测试

    在公司Confluence上看到一篇好文,原链接已不能访问.先收藏 转帖自:http://blog.csdn.net/wxq8102/article/details/1735726 1.1基本概念并发 ...

  9. 通过反射将request中的参数封装到对象中

    import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.text.SimpleDateFo ...

  10. vue踩坑记

    vue踩坑记 易错点 语法好难啊qwq 不要把'data'写成'date' 在v-html/v-bind中使用vue变量时不需要加变量名 在非vue事件中使用vue中变量时需要加变量名 正确 < ...