Python学习笔记

Python并行编程

线程和进程

进程是指独立的任务实例,线程是进程中控制流程。

进程是应用程序的一个执行实例,比如,在桌面上双击浏览器图标将会运行一个浏览器。线程是一个控制流程,可以在进程内与其他活跃的线程同时执行。“控制流程”指的是顺序执行一些机器指令。进程可以包含多个线程,所以开启一个浏览器,操作系统将创建一个进程,并开始执行这个进程的主线程。每一个线程将独立执行一系列的指令(通常就是一个函数),并且和其他线程并行执行。然而,同一个进程内的线程可以共享一些地址空间和数据结构。线程也被称作“轻量进程”,因为它和进程有许多共同点,比如都是可以和其他控制流程同时运行的控制流程,说它“轻量”是因为实现一个进程比线程要繁重的多。重申一遍,不同于进程,多个线程可以共享很多资源,特别是地址空间和数据结构等。

总结一下:

  • 进程可以包含多个并行运行的线程。
  • 通常,操作系统创建和管理线程比进程更能节省CPU的资源。线程用于一些小任务,进程用于繁重的任务——运行应用程序。
    同一个进程下的线程共享地址空间和其他资源,进程之间相互独立。

Ref: https://python-parallel-programmning-cookbook.readthedocs.io/zh_CN/latest/index.html

Python项目开发笔记

项目规划问题

Python项目中内部模块引用对于新手来讲是一件令人头疼的事情,基于python模块引入的机制,
提出python项目开发中项目内部模块引用的规范。

模块引入机制

Python中的模块引入完全依靠sys.path来搜索,使用相对路径会很依赖于当前位置;
使用绝对路径使项目移植变得繁琐。
因此,下面提出基于相对路径的引用规范,是项目移植变得简单方便。

规范

  1. 以项目名(以hpc为例)为根,在各个需要引用的模块中均使用项目名.模块位置来进行定位,
    hpc.util.network
  2. 基于1的规范,提出实现调用项目中任意模块中对象的方法。在根目录下创建__main__.py
    在该程序中引入要调用的模块,并执行。然后就可以在系统中,通过python -m hpc来执行该程序。
    python -m hpc的意思为在sys.path中搜索包hpc来执行。
    因此,若没有在系统中添加hpc项目父路径到sys.path,则需要切换到hpc所在父目录,执行。
    (因为sys.path含有当前目录)。
  3. 在Pycharm中,默认会把项目根加入sys.path,所以导致使用hpc.util.network会提示书写错误,
    我们可以在项目根目录上再加一层目录即可解决问题。

Python递归程序中的返回值问题

要注意递归程序的返回值会产生n次,n为递归程序调用的次数,而程序的最终返回值为递归程序最后一次执行时的返回值。递归程序的执行次序参考图。
Ref: https://blog.csdn.net/weixin_40476348/article/details/98602498