Я пишу процесс daemon в python3.4, который управляет 2-3 другими внешними процессами. Я стараюсь избегать GIL, просто разделяя работу, которую они делают. Эти другие процессы носят временный характер. Итак, что мне нужно:Создание и удаление процесса в python
Запустите процесс из интерпретатора python и сразу отделите его от того, который его начал. Я хочу, чтобы они были полностью изолированы без совместного использования stdout, stderr, stdin или других ресурсов. Я не хочу ждать выхода процесса, кода возврата, stdout, stderr или предоставлять данные через stdin.
Согласно документам, теперь рекомендуется подпроцесс. Это то, что я использую сейчас:
subprocess.Popen(["python3.4", daemonfile], env=env)
Он работает, но:
- когда процесс запущен, стандартный вывод и стандартный поток ошибок печатаются на одной и той же консоли был запущен главный демон. Я хочу, чтобы они были полностью отстранены.
- с 'shell = True', интерпретатор python переходит в режим интерпретатора.
- subprocess.Popen было рекомендовать в пользу os.spawn *** называет
Что такое лучший способ начать полный отдельный процесс (технически, даже не ребенок?) И она полностью отделена от родителя, чтобы они не делили ресурсы?
В этом случае не стоит беспокоиться о GIL: каждый процесс CPython имеет свой собственный GIL. – jfs
вам, вероятно, не нужен настоящий демон, но вот [пример реализации и описание (щелкните по ссылке pep)] (https://pypi.python.org/pypi/python-daemon/) – jfs
неправильно используйте 'shell = True' вместе с аргументом списка. Сравните: 'sh -c 'python a.py'' vs.' sh -c' python 'a.py' (вы не хотите последнего). – jfs