Python核心开发知识(进程的理解)
欢迎各位小哥哥小姐姐阅读本<小生>的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!!!
您的点赞和关注将是我持续更新的动力呢.^v^
有不懂的问题可以私聊我哦!
1.进程和线程:
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念; 进程是程序在处理机上的一次执行过程,它是一个动态的概念; 程序可以作为一种软件资料长期存在;而进程是有一定生命期的,是暂时的; 线程是最小的执行单元,不能独立执行, 必须依存在进程中,而进程由至少一个线程组成; 多进程中,每个进程中所有数据(包括全局变量)都各有拥有一份,互不影响; 多线程中,所有线程共享进程的内存;
优缺点:
线程执行开销小,但不利于资源的管理和保护;而进程正相反。
用途:
多线程多用于io密集型操作(io意味着出现阻塞)
多进程多用于cpu密集型运算(没有阻塞)
2.进程的创建:
import multiprocessing import os def run_proc(name): print('子进程运行中,name= %s ,pid=%d...' % (name, os.getpid())) # getpid()获取当前进程号 getppid()获取当前进程的父进程号 p = multiprocessing.Process(target=run_proc, args=('test',)) p.start()
使用继承的方式创建进程:
from multiprocessing import Process import time # 继承Process类 class NewProcess(Process): # 重写__init__方法 def __init__(self, num): super(MyThread, self).__init__() # 注意super()方法的格式 self.num = num # 重写run方法 def run(self): for i in range(self.num): print("子进程") time.sleep(0.5) def main(): p = NewProcess(5) # 调用p.start()方法,然后在Process的start方法中调用run方法 p.start() if __name__ == '__main__': main()
3.进程间通信:
from multiprocessing import Queue
q=Queue(3) # 初始化一个Queue对象,若括号中没有指定最大可接收的消息数量,或数量为负值,那么就代表可接受的消息数量没有上限(直到内存的尽头) q.put("消息1") q.get()
4.进程池的创建:
# 导入multiprocessing中的Poll方法 from multiprocessing import Pool def worker(msg): pass po=Pool(3) # 定义一个进程池,最大进程数3 po.apply_async(要调用的目标,(传递给目标的参数元祖,)) po.close() # 关闭进程池,关闭后po不再接收新的请求 po.join() # 等待po中所有子进程执行完成,必须放在close语句之后
5.进程池中的进程通信:
# 修改import中的Queue为Manager
from multiprocessing import Manager,Pool
q = Manager().Queue() # 使用Manager中的Queue po = Pool() # 定义进程池 q.put("消息1") q.get()
解耦(了解):
高内聚低耦合:是软件工程中的概念,是判断设计好坏的标准,主要是面向对象的设计,主要是看类的内聚性是否高,耦合度是否低。 耦合性:也称块间联系。 指软件系统结构中各模块间相互联系紧密程度的一种度量。 模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 内聚性:又称块内联系。 指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。 若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。 高内聚:是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。 耦合:一个软件结构内不同模块之间互连程度的度量。 低耦合:一个完整的系统,模块与模块之间,尽可能的使其独立存在。 也就是说,让每个模块,尽可能的独立完成某个特定的子功能。 模块与模块之间的接口,尽量的少而简单。 如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。 解耦:尽可能减少代码耦合。
相关推荐
老谢的自留地 2020-07-19
LUOPING0 2020-06-17
慕名ArcGIS 2020-06-12
jackalwb 2020-06-05
鲁鲁酱 2020-06-02
jackalwb 2020-04-20
架构技术交流 2020-04-14
zhongzhiwei 2020-04-14
GhostLWB 2020-02-13
zhaowj00 2020-02-01
jacktangj 2020-01-31
RayCongLiang 2019-12-29
pointfish 2020-01-03
atb 2019-12-25
patiencezzz 2019-12-24
Sabrina 2019-12-22
spylyt 2019-12-17
amazingbo 2019-12-09
Nicolase 2019-12-03