Функция input () предотвращает запуск нового многопроцессорного процесса при запуске через PyCharm - PullRequest
1 голос
/ 05 июня 2019

У меня есть простая программа (ниже), которая работает не так, как я ожидал, когда я запускаю ее через PyCharm.Он работает, как и ожидалось, при запуске через командную строку.

Это программа, которая порождает новый процесс, но после этого читает входные данные пользователя с помощью функции input().Проблема в том, что когда я использую эту функцию, процесс не запускается до тех пор, пока не будет введен ввод.

Проблема не возникает, когда я использую модуль threading и создаю новый поток.Но мне нужно использовать модуль multiprocessing, так как я запускаю графический интерфейс в порожденном процессе, который создает другие проблемы, если не запускается в отдельном процессе, а не просто в новом потоке.

Один из найденных мной обходных путей - sleep()после вызова start(), но это выглядит как уродливый обходной путь, который может не сработать в зависимости от мощности процессора, если я не буду ждать достаточно долго для запуска графического интерфейса.

Поэтому я хочу знать, почему возникает эта проблема, иесли есть элегантный способ ее решить вместо sleep()?

import multiprocessing as mp
import time


def my_func():
    print("The process has started.")


def main():
    p = mp.Process(target=my_func)
    p.start()

    # If we uncomment this, process will start as expected. If commented out, it will wait for input.
    # time.sleep(1)

    # Things I want to do while the process is on-going like getting an input from user and processing the input.
    print(input("Please input something:"))

    # wait for the window to be closed
    p.join()


if __name__ == '__main__':
    main()

Я использую Windows 10, PyCharm 2019.1, Python 3.6.8, 64-битный

1 Ответ

0 голосов
/ 05 июня 2019

Не происходит в Linux.Даже изменив многопроцессорность set_start_method на spawn.

Можете ли вы вставить несколько скриншотов или журналов?

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