如何在不高效等待响应的情况下调用另一个函数或另一个进程

时间:2019-05-24 05:34:14

标签: python linux multithreading multiprocessing

在Linux上的Python中,我有一个反复调用自身的函数。该功能不需要返回对调用函数的响应,因为已将内容记录到文件中(在tempfs文件系统中,在ram中)。

下面是我正在做的非常简单的示例。

import signal
import subprocess
from sys import argv, exit

# Ignore sigterm.
signal.signal(signal.SIGCHLD, signal.SIG_IGN)


def main(arg1,arg2)
    # < A lot of compute-heavy stuff here >
    # Call myself again with some new arguments.
    subprocess.Popen(["/usr/bin/python","/myscript.py", arg1, arg2])
    # < More compute-heavy stuff >
    exit(0)

# Entry point of the script.
main(str(argv[1]),str(argv[2]))

上面的命令运行,然后创建一个完全与旧的分离的新进程。我忽略了一些信号,所以父母退出了。这样可以防止无限的僵尸进程堆积。当我启动该脚本时,它会使用一些新参数再次启动,然后又一次又一次地无休止地运行。

这正在工作。它提供了预期的结果,但速度确实很慢。这些过程大约需要0.4秒才能完成,我认为其中大部分是过程加速时间,而不是实际的处理时间。

是否有更好/更快的方法?我在Linux上读到了很多有关双叉的信息,我不确定这是否是解决方案,因为它将创建更多的进程。同样在多处理模块上进行了很多思考,但是我不确定如何使用它在相同的函数中不断地调用相同的函数,而不会由于递归而崩溃。

1 个答案:

答案 0 :(得分:0)

我不确定,但是您可以测试一下。替换此行:

FormBodyWrapperFilter

与此:

    subprocess.Popen(["/usr/bin/python","/myscript.py", arg1, arg2])

如果不起作用,请尝试如下所示的os库:

    subprocess.Popen(["/usr/bin/python","/myscript.py","&", "disown", arg1, arg2])