在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上读到了很多有关双叉的信息,我不确定这是否是解决方案,因为它将创建更多的进程。同样在多处理模块上进行了很多思考,但是我不确定如何使用它在相同的函数中不断地调用相同的函数,而不会由于递归而崩溃。
答案 0 :(得分:0)
我不确定,但是您可以测试一下。替换此行:
FormBodyWrapperFilter
与此:
subprocess.Popen(["/usr/bin/python","/myscript.py", arg1, arg2])
如果不起作用,请尝试如下所示的os库:
subprocess.Popen(["/usr/bin/python","/myscript.py","&", "disown", arg1, arg2])