В Python на Linux у меня есть функция, которая вызывает себя снова и снова.Эта функция не должна возвращать ответ на вызывающую функцию, потому что вещи записываются в файлы (в файловой системе 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, я не уверен, что это решение, так как это будет создавать больше процессов.Также много думал о многопроцессорном модуле, но я не уверен, как использовать его для бесконечного вызова одной и той же функции из одной и той же функции снова и снова без сбоев из-за рекурсии.