生成多个同名的python进程/守护进程(不同的参数)

生成多个同名的python进程/守护进程(不同的参数),python,linux,multiprocessing,Python,Linux,Multiprocessing,我试图用python创建独立的进程。这些进程是一个python脚本,我希望有多个实例,但用不同的参数实例化。 简单地说,在for循环中,我调用subprocess.Popen(),但参数会相应地变化: for d in mylist: subprocess.Popen(['./subscriber.py', d.arg1, a.arg2, d.arg3]) 在subscriber.py中,我有一段代码,可以根据不同的情况“守护”进程 除此之外,我还尝试通过以下方式启动我的subscri

我试图用python创建独立的进程。这些进程是一个python脚本,我希望有多个实例,但用不同的参数实例化。 简单地说,在for循环中,我调用subprocess.Popen(),但参数会相应地变化:

for d in mylist:
    subprocess.Popen(['./subscriber.py', d.arg1, a.arg2, d.arg3])
在subscriber.py中,我有一段代码,可以根据不同的情况“守护”进程 除此之外,我还尝试通过以下方式启动我的subscriber.py:

for d in mylist:
    p = multiprocessing.Process(target=subscriber.start,
                                args=(d.arg1, d.arg2, d.arg3))
    p.daemon=True
    p.start()
我的脚本还使用python日志记录来写入公共日志文件

这两种方法的结果都是,只有循环最后一次迭代中的流程仍然在运行。我只需要让这些后台守护进程“永远”运行,但我只能得到一个实例![edit]重要的是,我希望调用线程终止,留下这群正在运行的守护进程,运行

我在stackoverflow和其他网站上搜索了很多地方,似乎找不到类似的例子。也许是我的python新手。。我的方法完全不正确吗

环境:-Python-2.7、ubuntu linux

2件事(除了将进程添加到上面提到的列表中):

  • 设置daemon=True实际上意味着与您期望的相反。从手册中:
    当进程退出时,它会尝试终止其所有daemonic子进程。
    。是的!而且,执事不能生孩子
  • 这让我想到: 2.您应该做的是生成daemon=False的子级,并且每个子级在启动时都将使用fork()进行守护。像这样:

        def daemonize():
    
            pid = os.fork()
            if pid != 0:
                sys.exit(0)
    
    
            return pid
    

    如果您真的不需要纯Python的解决方案,那么一个小小的shell脚本就可以完成这项工作:

    while read ARGS; do
      nohup ./subscriber.py $ARGS &
    done < mylist.txt
    
    读取参数时
    ;做
    nohup./subscriber.py$ARGS&
    完成
    其中,
    mylist.txt
    在单独的一行中包含每个
    subscriber.py
    实例的参数


    “守护”任何命令,并将其推送到后台。这意味着当生成该命令的会话结束时,nohup ed命令将成为init进程的子进程(PID=1)并继续运行。

    您是否尝试创建进程列表而不是重新分配变量?例如,p.append(multiprocessing.Process(target=subscriber.start,args=(d.arg1,d.arg2,d.arg3))可以,但我希望调用线程终止,留下一堆正在运行的守护进程。这就是我倾向于Popen()的原因,因为多处理似乎不允许子进程运行。似乎以同样的方式运行。如果我尝试从命令行手动启动subscriber.py,并使用>nohup subscriber.py x y z&,后跟>nohup subscriber.py a b c&。。ps命令仅显示正在运行的subscriber.py的1个实例(a b c版本)!这是否意味着subscriber.py控制可以存在多少实例?此外,当运行
    &
    时,它会显示生成的进程的pid(例如
    nohup sleep 3&…[1]31080
    ),并在完成时显示一条消息(例如
    [1]+31080 done nohup sleep 3
    )。您的意思是“x y z”实例很快就会消失。这意味着您应该看到这样的
    []+完成…
    消息。