Procesos atascados en bucle con PyInstaller-ejecutable
Python v3.5, Windows 10
Estoy usando múltiples procesos e intento capturar la entrada del usuario. Buscando todo lo que veo hay cosas extrañas que suceden cuando usoinput()
con múltiples procesos. Después de más de 8 horas de intentarlo, nada de lo que implementé funcionó, estoy seguro de que lo estoy haciendo mal, pero no puedo entenderlo por mi vida.
El siguiente es un programa muy simplificado que demuestra el problema. Ahora funciona bien cuando ejecuto este programa dentro de PyCharm, pero cuando usopyinstaller
para crear un solo ejecutable falla. El programa está constantemente atrapado en un bucle que le pide al usuario que ingrese algo como se muestra a continuación:.
Estoy bastante seguro de que tiene que ver con cómo Windows toma la entrada estándar de las cosas que he leído. También intenté pasar las variables de entrada del usuario comoQueue()
elementos a las funciones pero el mismo problema. Leí que deberías ponerinput()
en el proceso principal de Python, así que lo hice enif __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()