У меня есть простая программа (ниже), которая работает не так, как я ожидал, когда я запускаю ее через 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-битный