【发布时间】:2021-03-01 23:32:51
【问题描述】:
Python v3.5,Windows 10
我正在使用多个进程并尝试捕获用户输入。搜索我看到的所有内容时,在将input() 与多个进程一起使用时会发生奇怪的事情。经过 8 小时以上的尝试,我没有实施任何方法,我很肯定我做错了,但我终其一生都无法弄清楚。
以下是一个非常精简的程序来演示该问题。现在,当我在 PyCharm 中运行这个程序时它可以正常工作,但是当我使用 pyinstaller 创建单个可执行文件时它会失败。程序一直卡在一个循环中,要求用户输入如下所示的内容:。
我很确定这与 Windows 如何从我阅读的内容中获取标准输入有关。我也尝试将用户输入变量作为Queue() 项传递给函数,但同样的问题。我读到您应该将input() 放在主要的python 进程中,所以我在if __name__ = '__main__': 下这样做了
from multiprocessing import Process
import time
def func_1(duration_1):
while duration_1 >= 0:
time.sleep(1)
print('Duration_1: %d %s' % (duration_1, 's'))
duration_1 -= 1
def func_2(duration_2):
while duration_2 >= 0:
time.sleep(1)
print('Duration_2: %d %s' % (duration_2, 's'))
duration_2 -= 1
if __name__ == '__main__':
# func_1 user input
while True:
duration_1 = input('Enter a positive integer.')
if duration_1.isdigit():
duration_1 = int(duration_1)
break
else:
print('**Only positive integers accepted**')
continue
# func_2 user input
while True:
duration_2 = input('Enter a positive integer.')
if duration_2.isdigit():
duration_2 = int(duration_2)
break
else:
print('**Only positive integers accepted**')
continue
p1 = Process(target=func_1, args=(duration_1,))
p2 = Process(target=func_2, args=(duration_2,))
p1.start()
p2.start()
p1.join()
p2.join()
【问题讨论】:
标签: python windows parallel-processing pyinstaller python-multiprocessing