【问题标题】:python -c cmd will wait all process finishpython -c cmd 将等待所有进程完成
【发布时间】:2018-05-24 06:19:56
【问题描述】:

代码:

文件:script.py

from multiprocessing import Process


def func():
    async_process()
    print('OK')
    return 123

def func2(args):
    # do a lot of things here
    # ...
    pass

def async_process():
    p = Process(target=func2, args=args)
    p.daemon = False 
    p.start()

当我在 Python 脚本中直接调用 func() 时,我可以立即得到返回值,这是我所期望的。

但是,当我像这样在命令行中调用 func() 时:

python -c "from script import func;func()"

命令行将完成执行,直到新创建的进程自行完成。这不是我想要的。

我应该如何更改程序或者我应该如何编写脚本以确保:

  1. 我可以在命令行中调用func();

  2. func()完成后命令行会立即返回值,不会等待新创建的进程。

  3. 新创建的进程可以继续运行。

【问题讨论】:

    标签: python linux python-3.x shell process


    【解决方案1】:

    这是因为在async_process() 中创建的子进程没有与其父进程分离,因此父进程必须等待子进程完成才能退出。 如果要创建 Unix 术语中的守护进程,则必须使用双叉方法将子进程与其父进程分离,并将控制权移交给操作系统的调度程序。 This 看起来是在 python 中创建 Unix 守护进程的好方法

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 2022-01-23
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2018-03-04
      相关资源
      最近更新 更多