python -c cmd будет ждать завершения всего процесса - PullRequest
0 голосов
/ 24 мая 2018

Коды:

Файл: 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()

Когда я напрямую вызываю func () в скрипте Python, я могу сразу получить возвращаемое значение, это то, что я ожидаю.

Но когда я вызываю func () в командной строке следующим образом:

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

Командная строка завершит выполнение, пока новый созданный процесс не завершит сам себя,Это не то, что я хочу.

Как мне изменить программу или как написать скрипт, чтобы обеспечить:

  1. Я могу вызвать func () в командной строке;

  2. Командная строка немедленно вернет значение после завершения функции func () и не будет ждать нового созданного процесса.

  3. Новый созданный процесс может продолжать работать.

1 Ответ

0 голосов
/ 24 мая 2018

Это связано с тем, что дочерний процесс, созданный в async_process(), не отделен от своего родителя, поэтому родитель должен дождаться завершения дочернего процесса, прежде чем выйти.Если вы хотите создать процесс-демон в значении Unix для этого термина, вам придется использовать метод двойной вилки, чтобы отделить дочерний элемент от его родительского элемента и передать управление планировщику ОС. Этот выглядит достойным рецептом для создания процессов демона Unix в python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...