python孤儿进程示例和解决方法

子进程原本的父进程停了,它就会由系统的init进程接管,这个子线程就成了孤儿进程,另外还有个僵尸进程的概念,说的是进程已经结束了但是资源没有被父进程清理。 在python中很容易产生孤儿进程,例如以下代码: import time import multiprocessing def sub_task(): """子进程任务:循环打印时间和父进程状态""" …

%:取余 vs 取模

刚才发现,这个符号在python中表示取模,而在其他一些语言中,例如 Java、Javascript、Golang 等,表示的是取余。这两者有什么区别呢? 现象 计算下面这个式子: -5 % 3 # 在 python 中,它等于 1 # 在 java 中,它等于 -2 计算 优势 python中经常会有切片操作,取模则可以简化这一操作,例如取一个长度为5的数 …

python:多进程共享复杂的可写对象

本来想用该方法共享一个模型的,一个进程用于收集训练数据,一个进程用于训练,但是仍然不行。但基本的进程共享内存空间对象还是可以的: from multiprocessing import Process from multiprocessing.managers import BaseManager # 第一步:定义需要共享的类 class Data: """ …

python classmethod staticmethod

有两点不同 1. class method 会自动将当前class作为参数传入,但我觉得这并不能让它和 static method 产生差异,因为你完全可以这样写: class F(): @staticmethod def sm(cls): print(cls) @classmethod def cm(cls): print(cls) F.sm(S) # …

python multiprocessing Pipe Queue

两者功能类似,甚至可以说是相同,都是用于多进程通信。两者可以认为是Hibernate和JPA的关系,即Queue可以看作是对Pipe的进一步封装 Pipe的基本形式为: pipe1, pipe2 = multiprocessing.Pipe() def task1(p1, p2): p1.send("bingo") # 进程1向pipe1发送一条数据 def …

python多继承的问题

__new__ 考虑以下代码的输出结果: class A: print("AAAAA") def __init__(self): print("a init") ... def __new__(cls, *args, **kwargs): print("a new") return super(A, cls).__new__(cls) a = A() 结果为 …

python:global vs nonlocal

这两者都只有在修改外部作用域变量时才需要,如果只是读取就不用 首先需要区分python中的全局变量和局部变量 全局变量是在函数外定义的变量,即所有定义在def中的变量都不是全局变量,即使是嵌套函数外层函数中定义的变量 相反,定义在函数内部的变量即为局部变量,即使闭包嵌套再多层,也都是局部变量。 如果要在函数中 修改 全局变量(即将原本的引用指向一个新的引用地 …

python的闭包简介

LEGB法则 python变量的作用域遵从LEGB法则,即: Local(L):定义在方法或类内部的变量,如 def 或 lambda 函数内部 Enclosed(E):闭包内部变量(仅限闭包) Global(G):全局变量 Built-in(B):python内置的关键字 对任意一个变量,python会按照上述顺序依次查找 这意味着python中有且仅有这 …

python -m

长话短说 简单来说,-m 参数的作用有两个: 简化运行方式,你可以直接运行在sys.path下的模块而不需要指定具体路径(如果直接用python pkgpath则要指明具体路径) 它会将当前执行的目录也加入到sys.path,这样即使在代码中使用相对或绝对路径 import package_path 也是可以运行的(否则就只能引用sys.path中的 …