python进程 线程,python如何获取进程和线程状态

1,python如何获取进程和线程状态threading.active_count()Return the number of Thread objects currently alive. The returned count is equal to the length of the list returned by enumerate().active_count可以返回当前活动的线程枚举我一般是这么用的def getHeatsParallel(self):threads = []for i in range(0, self.threadCount):t = threading.Thread(target=self.SomeFunction, name=str(i))threads.append(t)t.start()for t in threads:t.join()【python进程 线程,python如何获取进程和线程状态】
2,简述python进程线程和协程的区别及应用场景协程多与线程进行比较1) 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU 。2) 线程进程都是同步机制,而协程则是异步3) 协程能保留上一次调用时的状态,每次过程重入时 , 就相当于进入上一次调用的状态1.线程和进程: 线程是属于进程的,线程运行在进程空间内 , 同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除 。线程可与属于同一进程的其它线程共享进程所拥有的全部资源 , 但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈) 。2.线程、进程与协程:线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行 , 线程切换时需要耗时(保持状态,下次继续) 。协程 , 则只使用一个线程,在一个线程中规定某个代码块执行顺序 。协程的适用场景: 当程序中存在大量不需要CPU的操作时(IO),适用于协程;
3,Python中进程和线程的区别详解什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段 。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别:进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内 。一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间 。同一进程中的两段代码不能够同时执行,除非引入线程 。线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除 。线程占用的资源要少于进程所占用的资源 。进程和线程都可以有优先级 。在线程系统中进程也是一个线程 。可以将进程理解为一个程序的第一个线程 。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.(4)二者均可并发执行.
4,python中什么是线程线程是系统中的名词 , Python一般是单线程的,Python的多线程优化很差 。线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元 。一个标准的线程由线程ID , 当前指令指针(PC),寄存器集合和堆栈组成 。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源 。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行 。由于线程之间的相互制约,致使线程在运行中呈现出间断性 。线程也有就绪、阻塞和运行三种基本状态 。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行 。每一个程序都至少有一个线程,若程序只有一个线程 , 那就是程序本身 。线程是程序中一个单一的顺序控制流程 。进程内有一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指令运行时的程序的调度单位 。在单个程序中同时运行多个线程完成不同的工作 , 称为多线程 。5,请教关于python线程的两个问题是这样的 , 去掉GIL没有太大的价值,而且在新版本的python(包括python3k)也是不会取消的 。在1999年Greg Stein和Mark Hammond创建了一个去掉GIL的1.5分支,将GIL替换为细粒度锁 。但是 , 做过了基准测试之后,结果令人失望,在最好的情况下 , 单线程的效率只有原来的一半 。另外去掉 GIL 将会造成对解释器的大量的重写,它会使扩展模块变得复杂,一旦扩展有任何的全局可变数据 , 将不得不为多线程并发调用做好准备 。也可能需要对Python/C API进行改动,它们是为了在一系列的调用中需要对某种对象加锁所需要的 。出于以上考虑,Guido尽管欢迎有人来维护一个无GIL的python分支 , 但他本人不会花太多精力 。最后,尽管不会取消GIL, 但是着并不意味着不能充分利用多cpu,有一下几种方法:1.可以创建多个进程而不是线程 , 进程数和cpu一样多 。2.使用Jython 或 IronPython,可以得到真正的多线程 。这个问题 也许不是很好说,但是可以这么说python是建立在虚拟机也就是pythonxx.dll上运行的 ,  所以在这个进程里面所有的线程都是基于轮询方式来调度线程的,当然你也可以开多个实例,所以python的线程并不不是内核级的多线程,也不是os级的 而是基于虚拟机之上的 ,  当然Python多线程这块,我也一直期望他改进,不过作为动态语言,现在这样架构够用 。第二你说的不能更好的利用cpu资源,这个不用担心,python如果多线程 , 还是可以充分利用的,我们这边有上万行的Python程序跑起来空运行占几MB内存cpu也不高,如果任务来了 , 可以占到1-2G的内存 和大量的CPU所以你不必担心不会充分利用cpu的问题,这个应该跟你的程序结构和算法 , 以及任务调度的关系的!

    推荐阅读