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() - 进程池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()
进程数据共享:
- 进程数据共享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[:]) - 进程数据共享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
# -*- 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
# -*- 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
# -*- 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()
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 ...
随机推荐
- NX二次开发-获取尺寸的附加文本UF_DRF_ask_appended_text
#include <uf.h> #include <uf_drf.h> #include <uf_obj.h> #include <uf_part.h> ...
- 常用Git命令以及出现的状况ing
(有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 我的GitHub: Cwolf9 下面是我学习Git时了解到的一些命令和状况经验. 把它们记下来免得忘了.就算忘了也有地方看... 状 ...
- 秒懂机器学习---k-近邻算法实战
秒懂机器学习---k-近邻算法实战 一.总结 一句话总结: k临近算法的核心就是:将训练数据映射成k维空间中的点 1.k临近算法怎么解决实际问题? 构建多维空间:每个特征是一维,合起来组成了一个多维空 ...
- 剑指offer——26反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 题解: 每次只反转一个节点,先记住cur->next, 然后pre->cur,即可; class Solution { pu ...
- 【收集+】DDR5 vs DDR4
Advantages of Migrating to DDR5 DDR5 is the next evolution in DRAM, bringing a robust list of new fe ...
- 解决WIN8输入法的问题,Ctrl+空格,Ctrl+Shift,切换问题
在WIN8中,我们曾经熟悉的的Ctrl+空格和Ctrl+Shift消失了,取而导致的是WIN+空格. 在这里先简单解释一下WIN8的输入法结构: 在WIN7以前的输入法中,输入法采用了平行目录的结构, ...
- 2018 年 -- 15 个有意思的 JavaScript 和 CSS 库
在Tutorialzine上你可以了解最新最酷的Web发展趋势.这就是为什么每个月都会发布一些偶然发现并认为值得你关注的最佳资源的缘由. Direction Reveal (方向展示) 该插件检测光标 ...
- fuzzy commitment 和fuzzy vault
Alice,这位令人惊异的魔术天才,正表演关于人类意念的神秘技巧.她将在Bob选牌之前猜中Bob将选的牌!注意Alice在一张纸上写出她的预测.Alice很神秘地将那张纸片装入信封中并封上.就在人们吃 ...
- Batch - C:\Progra~1是什么意思
就是那种DOS下的8.3的规范,可以这样写 C:\Progra~1也可以这样写全名字的 "C:\Program File",因为这个路径中的文件夹名有空格,要用两个英文输入法下的双 ...
- day18 函数定义、参数;名称空间;全局变量及局部变量。
Python之路,Day6 = Python基础6 函数的定义 def func1(): # 定义一个函数,名字叫func1,括号中没有传入参数 print('hello word') # 这里是 f ...