多处理或os.fork,os.exec?

ali*_*ice 3 python

我正在使用多处理模块来分叉子进程.因为在分叉时,子进程获取父进程的地址空间,我得到父进程和子进程的相同记录器.我想清除父进程中携带的任何值的子进程的地址空间.我知道多处理在较低级别执行fork()而不执行exec().我想知道在我的情况下使用多处理是否合适,还是应该使用os.fork()和os.exec()组合,还是有其他解决方案?

谢谢.

Ell*_*ioh 8

因为multiprocessing从程序中运行一个函数就像它是一个线程函数一样,它肯定需要一个完整的进程状态副本.这意味着要做fork().

使用提供的更高级别接口multiprocessing通常更好.至少你不应该fork()自己关心返回代码.

os.fork()是一个较低级别的功能,提供更少的服务开箱即用,但你肯定可以用于任何multiprocessing用于......的代价部分重新实现的代价multiprocessing.所以,我想,multiprocessing应该对你好.

但是,如果您处理'内存占用太大而无法复制它(或者如果您有其他理由避免分叉 - 打开与数据库的连接,打开日志文件等),您可能必须使您想要运行的功能一个新的进程一个单独的python程序.然后你可以使用它来运行它subprocess,将参数传递给它stdin,捕获它stdout并解析输出以获得结果.

UPD: os.exec... 函数族很难用于大多数目的,因为它用生成的函数替换你的进程(如果你运行相同的程序,它将从一开始就重新启动,而不是保留任何内存数据).但是,如果您确实不需要继续父进程执行,exec()可能会有一些用处.

根据我的个人经验:os.fork()经常用于在Unix上创建守护进程; 我经常使用subprocess(通过stdin/stdout进行通信); 几乎从未使用过多处理; 我生命中没有一次是我需要的os.exec...().