gpt4 book ai didi

python多进程操作实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python多进程操作实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

由于CPython实现中的GIL的限制,python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况我们需要使用多进程。 这也许就是python中多进程类库如此简洁好用的原因所在。在python中可以向多线程一样简单地使用多进程.

1、多进程 。

process的成员变量和方法:

>>class multiprocessing.Process([group[, target[, name[, args[, kwargs]]]]]) 来的定义类似于threading.Thread。target表示此进程运行的函数,args和kwargs表示target的参数.

>>name, pid 。

分别表示进程的名字,进程id.

>> daemon成员 。

daemon标志位bool变量,需要在start()调用前设置。daemon的初始值是从父进程继承而来。当一个进程结束的时候,它尝试去结束它的所有的daemon子进程.

注意:

daemon进程不允许创建子进程。否则当daemon进程结束的时候它的子进程不能被结束.

这里的daemon不是Unix的daemon进程,当父进程结束的时候所有的daemon子进程也将被终止(对于非daemon进程,父进程不等待非daemon的紫子进程,除非显示地对非daemon子进程使用join()方法).

>>  exitcode 。

如果进程还没有退出,则为None,如果正确的退出则为0,如果有错误则为>0的错误代码,如果进程为终止则为-1*singal。  。

>> start(), is_live(), terminate() 。

start()用来启动进程,is_live()用来查看进程的状态,terminate()用来终止进程.

>> run() 。

可以在process的子类中重载run()方法,从而设定进程的任务。重载process是构造新进程的另一种方式,一定程度上上等价于process的target参数.

multiprcessing的静态方法:

>>  multiprocessing.cpu_count() 。

用来获得当前的CPU的核数,可以用来设置接下来子进程的个数.

>>  multiprocessing.active_children() 。

用来获得当前所有的子进程,包括daemon和非daemon子进程.

实例:

  。

复制代码 代码如下:

import multiprocessing import time import sys 。

  。

def worker(num):     p = multiprocessing.current_process()     print ('Starting:' + p.name + ":" + str(p.pid))     print(str(num))     sys.stdout.flush()     print ('Exiting :' + p.name + ":" + str(p.pid))     sys.stdout.flush() 。

def daemon():     p = multiprocessing.current_process()     print ('Starting:' + p.name + ":" + str(p.pid))     sys.stdout.flush()     time.sleep(10)     print ('Exiting :' + p.name + ":" + str(p.pid))     sys.stdout.flush()     def non_daemon():     p = multiprocessing.current_process()     print ('Starting:' + p.name + ":" + str(p.pid))     sys.stdout.flush()     time.sleep(20)     print ('Exiting :' + p.name + ":" + str(p.pid))     sys.stdout.flush()     if __name__ == '__main__':     w = multiprocessing.Process(name='worker', target=worker, args=(100,))     d = multiprocessing.Process(name='daemon', target=daemon)     d.daemon = True     nd = multiprocessing.Process(name='non-daemon', target=non_daemon)     w.start()     d.start()     nd.start()         print("the number of CPU is " + str(multiprocessing.cpu_count()))     print("All children processes:")     for p in multiprocessing.active_children():         print("child:" + p.name + ":" + str(p.pid))     print()         w.join()     #d.join() 。

  。

运行结果:

python多进程操作实例

可以从上面的例子看到没有多非daemon子进程使用join()方法,结果父进程没有等待非daemon进程结束就退出了.

最后此篇关于python多进程操作实例的文章就讲到这里了,如果你想了解更多关于python多进程操作实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com