/dev/null & done 换句话说,它会在后台运行 su-6ren">
gpt4 book ai didi

python - 在后台将模块作为子进程启动,并分离

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:10 27 4
gpt4 key购买 nike

bash 中,我可以执行以下操作:

for f in subdir/*.sh; do
nohup "$f" "$@" &> /dev/null &
done

换句话说,它会在后台运行 subdir 中的所有 *.sh 脚本,并进行分离,这样如果主脚本结束,后台脚本也不会运行被终止。

现在,假设我有以下 Python 项目:

proj/
__init__.py
main.py
subdir/
__init__.py
mod_a.py
mod_b.py
mod_c.py

如何执行类似于 bash 脚本的操作?但是参数作为 Python 对象传递?

例如:我有两个字符串 ab、一个列表 l 和一个字典 d

  • 加载mod_a.py,调用mod_a.main(a, b, l, d),并分离
  • 加载 mod_b.py,调用 mod_b.main(a, b, l, d),然后分离
  • 加载mod_c.py,调用mod_c.main(a, b, l, d),并分离
  • main.py 可以结束,让 mod_amod_bmod_c 在后台运行直至完成

最佳答案

要在 Python 中模拟 nohup,您可以让子进程忽略 SIGHUP 信号:

import signal

def ignore_sighup():
signal.signal(signal.SIGHUP, signal.SIG_IGN)

即,模拟 bash 脚本:

#!/bin/bash
for f in subdir/*.sh; do
nohup "$f" "$@" &> /dev/null &
done

在Python中使用subprocess模块:

#!/usr/bin/env python3
import sys
from glob import glob
from subprocess import Popen, DEVNULL, STDOUT

for path in glob('subdir/*.sh'):
Popen([path] + sys.argv[1:],
stdout=DEVNULL, stderr=STDOUT, preexec_fn=ignore_sighup)

要创建适当的守护进程,您可以使用 python-daemon package .

关于python - 在后台将模块作为子进程启动,并分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521639/

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