Python全栈开发:进程代码实例
进程与线程的关系
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 多进程(主进程,子进程):
- 优点:能同时利用多个CPU,进行多个操作,提高效率。
- 缺点:耗费内存资源(进程要开辟内存空间),进程不是越多越好,CPU个数 = 进程个数。
- 注意:进程创建内存空间,线程共享内存空间,进程里有全局解释器锁,进程中一次只应许一个线程被处理。
- 使用场景:计算密集型适合多进程。
- 多线程(主线程,子线程):
- 优点:共享内存,IO操作时(不用CPU),创造并发操作(多个操作同时进行),提高效率。
- 缺点:抢占资源,请求上下文切换非常耗时(线程处理切换后找到上次处理的地方),线程不是越多越好,视具体案例而定。
- 注意:在计算机中,执行任务的最小单元就是线程。
- 使用场景:IO密集型适合多线程。
- """
- """
- 使用进程
- 1、创建进程
- """
- import multiprocessing
- def f1(a1):
- print(a1)
- if __name__ == "__main__":
- t1 = multiprocessing.Process(target=f1, args=(11,))
- # t1.daemon = True
- t1.start()
- t1.join(2)
- t2 = multiprocessing.Process(target=f1, args=(22,))
- # t2.daemon = True
- t2.start()
进程池:
- 进程池1
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 调用Pool进程池模块,创建进程池
- """
- from multiprocessing import Pool
- import time
- def myfun(i):
- time.sleep(2)
- return i + 100
- def end_call(arg):
- print("end_all", arg)
- if __name__ == "__main__":
- p = Pool(5)
- for i in range(10):
- p.apply_async(func=myfun, args=(i,), callback=end_call)
- print("end")
- p.close()
- p.join()
- #!/usr/bin/env python
- 进程池2
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- apply与apply_sync的区别
- """
- from multiprocessing import Pool
- import time
- def f1(a):
- time.sleep(1)
- print(a)
- return a
- def f2(b):
- r = "第" + str(b+1) + "个子进程执行完毕"
- print(r)
- if __name__ == "__main__":
- pool = Pool(5)
- for i in range(10):
- # pool.apply(func=f1, args=(i,))
- pool.apply_async(func=f1, args=(i,), callback=f2)
- """
- pool.apply:每个进程之间是串行执行的,排队执行;每一个进程都有一个join()方法
- pool.apply_sync:每个进程是并发执行的,并发数取决于进程池,并且可以触发回调函数;每一个进程没有一个join()方法;每一个进程的daemon = True
- """
- print("主进程执行完毕")
- pool.close() # 等所有任务终止再结束,能拿到子进程的结果
- # pool.terminate() # 立即终止所有任务,拿不到子进程的结果
- pool.join()
- #!/usr/bin/env python
进程数据共享:
- 进程数据共享1
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 默认情况下进程数据不共享,要用一个中介数据类型实现进程数据共享
- 进程数据共享方式一:
- 使用数组,Array使用时必须先定义大小
- temp = Array("i",[11,22,33,44]),"i"表示数据类型,数组中的数据类型必须一致
- """
- from multiprocessing import Process, Value, Array
- def f(n, a):
- n.Value = 3.1415927
- for i in range(len(a)):
- a[i] = -a[i]
- if __name__ == "__main__":
- num = Value("d", 0.0)
- arr = Array("i", range(10))
- p = Process(target=f, args=(num, arr))
- a = Process(target=f, args=(num, arr))
- p.start()
- a.start()
- p.join()
- a.join()
- print(num.value)
- print(arr[:])
- #!/usr/bin/env python
- 进程数据共享2
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 默认情况下进程数据不共享,要用一个中介数据类型实现进程数据共享
- 进程数据共享方式二:
- 使用特殊字典
- dic = manager.dict()
- """
- from multiprocessing import Process, Manager
- def f(d, l):
- d[1] = "1"
- d["2"] = 2
- d[0.25] = None
- l.reverse()
- if __name__ == "__main__":
- with Manager() as manager:
- d = manager.dict()
- l = manager.list(range(10))
- p = Process(target=f, args=(d, l))
- p.start()
- p.join()
- print(d)
- print(l)
- #!/usr/bin/env python
- 进程数据不共享
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 默认情况下进程数据不共享
- """
- from multiprocessing import Process
- li = []
- def foo(i):
- li.append(i)
- print("hello", li)
- if __name__ == "__main__":
- for i in range(10):
- t = Process(target=foo, args=(i,))
- t.start()
- #!/usr/bin/env python
- 进程字典
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 进程数据共享方式二:
- 使用特殊字典dic = manager.dict()
- """
- from multiprocessing import Process, Manager
- def foo(i, dic):
- dic[i] = 100 + i
- print(len(dic))
- if __name__ == "__main__":
- manage = Manager()
- dic = manage.dict()
- # dic = dict() 数据无法共享
- for i in range(2):
- p = Process(target=foo, args=(i, dic))
- p.start()
- p.join()
- #!/usr/bin/env python
- 进程数组
- #!/usr/bin/env python
- # -*- coding;utf-8 -*-
- """
- 进程数据共享方式一:
- 使用数组,Array使用时必须先定义大小
- temp = Array("i",[11,22,33,44]),"i"表示数据类型,数组中的数据类型必须一致
- """
- from multiprocessing import Process, Array
- def foo(i, temp):
- print(id(temp))
- temp[i] = 100 + i
- for item in temp:
- print(i, "------>>", item)
- if __name__ == "__main__":
- temp = Array("i", [11, 22, 33, 44])
- for i in range(2):
- p = Process(target=foo, args=(i, temp))
- p.start()
- p.join()
- #!/usr/bin/env python
Python全栈开发:进程代码实例的更多相关文章
- python全栈开发 * 进程理论 进程创建 * 180724
一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...
- python全栈开发 * 进程之间的通信,进程之间数据共享 * 180726
进程之间的通信(IPC)队列和管道一.队列 基于管道实现 管道 + 锁 数据安全(一).队列 队列遵循先进先出原则(FIFO) 多用于维护秩序,买票,秒杀 队列的所有方法: put()(给队列里添加数 ...
- python全栈开发 * 进程池,线程理论 ,threading模块 * 180727
一.进程池 (同步 异步 返回值) 缺点: 开启进程慢 几个CPU就能同时运行几个程序 进程的个数不是无线开启的 应用: 100个任务 进程池 如果必须用多个进程 且是高计算型 没有IO型的程序 希望 ...
- Python全栈开发:递归实例
#!/usr/bin/env python # -*- coding;utf-8 -*- """ 递归不能无限,python会限制递归深度,递归主要用于费布拉切数列 &q ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
- 学习笔记之Python全栈开发/人工智能公开课_腾讯课堂
Python全栈开发/人工智能公开课_腾讯课堂 https://ke.qq.com/course/190378 https://github.com/haoran119/ke.qq.com.pytho ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
随机推荐
- CommandLineToArgvW调EXE传入参数【转载】
#include <afxwin.h> // TODO: add your code here LPWSTR *szArglist = NULL; ; szArglist = Comma ...
- NX二次开发-UFUN编辑图层类别描述UF_LAYER_edit_category_descr
1 NX11+VS2013 2 3 #include <uf.h> 4 #include <uf_layer.h> 5 6 7 UF_initialize(); 8 9 //创 ...
- 一幅图解决R语言绘制图例的各种问题
一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...
- centos 7 设置IP地址
先说下安装方式:我是采用的最小化安装 虚拟机软件:vmware 设置IP有两种情况,动态IP和静态IP,下面分别说明两种IP地址的设置方法 1.动态IP 条件:路由设置了动态分配IP地址(一般默认是动 ...
- socket的多线程实现
步骤: 1.服务端创建ServerSocket,循环调用accept()等待客户端连接: 2.客户端创建socket并请求与服务端对话: 3.服务端接收客户端的请求,创建socket与客户端进行专线连 ...
- python初探爬虫
python爬虫初探 爬取前50名豆瓣电影: 废话少说,直接上代码! import reimport requestsfrom bs4 import BeautifulSoupdef get_co ...
- 2018北京网络赛 G The Mole /// 分块暴力 点线距离
题目大意: 给定n段线段 编号为1~n 接下来m个询问 给定一点 输出离该点最近的线段的最小编号(距离相等时取编号小的) 题解 大致就是 1.坐标范围为(0,2^16-1) 将坐标系划分为2^8*2^ ...
- Spring MVC @RequestParam(5)
案例来说明 1 @RequestMapping("user/add") 2 public String add(@RequestParam("name") St ...
- 网页开发人员收藏的16款HTML5工具
本文收集的20款优秀的 HTML5 Web 应用程序,值得添加到您的 HTML5 的工具箱中,他们能够帮助你开发前端项目更快.更容易. Initializr Initializr 是一个可以让你创建 ...
- SpringCloud学习笔记《---05 Zuul---》基础篇