Python并行编程
线程和进程
进程是指独立的任务实例,线程是进程中控制流程。
进程是应用程序的一个执行实例,比如,在桌面上双击浏览器图标将会运行一个浏览器。线程是一个控制流程,可以在进程内与其他活跃的线程同时执行。“控制流程”指的是顺序执行一些机器指令。进程可以包含多个线程,所以开启一个浏览器,操作系统将创建一个进程,并开始执行这个进程的主线程。每一个线程将独立执行一系列的指令(通常就是一个函数),并且和其他线程并行执行。然而,同一个进程内的线程可以共享一些地址空间和数据结构。线程也被称作“轻量进程”,因为它和进程有许多共同点,比如都是可以和其他控制流程同时运行的控制流程,说它“轻量”是因为实现一个进程比线程要繁重的多。重申一遍,不同于进程,多个线程可以共享很多资源,特别是地址空间和数据结构等。
总结一下:
- 进程可以包含多个并行运行的线程。
- 通常,操作系统创建和管理线程比进程更能节省CPU的资源。线程用于一些小任务,进程用于繁重的任务——运行应用程序。
同一个进程下的线程共享地址空间和其他资源,进程之间相互独立。
Ref: https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/index.html
Python项目开发笔记
项目规划问题
Python项目中内部模块引用对于新手来讲是一件令人头疼的事情,基于python模块引入的机制,
提出python项目开发中项目内部模块引用的规范。
模块引入机制
Python中的模块引入完全依靠sys.path
来搜索,使用相对路径会很依赖于当前位置;
使用绝对路径使项目移植变得繁琐。
因此,下面提出基于相对路径的引用规范,是项目移植变得简单方便。
规范
- 以项目名(以
hpc
为例)为根,在各个需要引用的模块中均使用项目名.模块位置
来进行定位,
如hpc.util.network
。 - 基于1的规范,提出实现调用项目中任意模块中对象的方法。在根目录下创建
__main__.py
,
在该程序中引入要调用的模块,并执行。然后就可以在系统中,通过python -m hpc
来执行该程序。python -m hpc
的意思为在sys.path
中搜索包hpc来执行。
因此,若没有在系统中添加hpc项目父路径到sys.path
,则需要切换到hpc所在父目录,执行。
(因为sys.path
含有当前目录)。 - 在Pycharm中,默认会把项目根加入
sys.path
,所以导致使用hpc.util.network
会提示书写错误,
我们可以在项目根目录上再加一层目录即可解决问题。
Python递归程序中的返回值问题
要注意递归程序的返回值会产生n次,n为递归程序调用的次数,而程序的最终返回值为递归程序最后一次执行时的返回值。递归程序的执行次序参考图。
Ref: https://blog.csdn.net/weixin_40476348/article/details/98602498