Python 为什么线程不等待输入就结束了?

Python 为什么线程不等待输入就结束了?,python,multithreading,input,Python,Multithreading,Input,“你叫什么名字?”打印了五次,但我无法让input()工作。为什么程序结束时不需要五个用户输入?当使用线程时-可以做什么来获得5个输入 import threading def user_input(): print("Inside user_input") ui = input("What's your name? ") return ui threads = [] for i in range(5): t = threading.Thread(target

“你叫什么名字?”打印了五次,但我无法让input()工作。为什么程序结束时不需要五个用户输入?当使用线程时-可以做什么来获得5个输入

import threading

def user_input():
    print("Inside user_input")
    ui = input("What's your name? ")
    return ui

threads = []
for i in range(5):
    t = threading.Thread(target=user_input)
    threads.append(t)
    t.start()

尝试更少的代码,如下所示。这在linux上工作。发布的代码在windows上不起作用,但在linux上起作用

输入代码:

import threading

def user_input():
    input("What's your name? ")

threads = []
for i in range(5):
    t = threading.Thread(target=user_input)
    threads.append(t)
    t.start()
输出:

Python 3.7.4 (default, Jul  9 2019, 00:06:43)
[GCC 6.3.0 20170516] on linux
What's your name? test
What's your name? test
What's your name? test
What's your name? test

尝试更少的代码,如下所示。这在linux上工作。发布的代码在windows上不起作用,但在linux上起作用

输入代码:

import threading

def user_input():
    input("What's your name? ")

threads = []
for i in range(5):
    t = threading.Thread(target=user_input)
    threads.append(t)
    t.start()
输出:

Python 3.7.4 (default, Jul  9 2019, 00:06:43)
[GCC 6.3.0 20170516] on linux
What's your name? test
What's your name? test
What's your name? test
What's your name? test

因为主线程已退出导致程序终止。您必须
join()
您的线程。@selbie和@KlausD,如果线程不是守护进程线程,而它们不是守护进程线程,则即使在主线程终止后,它们也应继续运行。当我运行这个程序时,输入所有5个输入都没有问题。当我将
return ui
语句更改为
print(ui)
语句时,我看到了输入的内容。看到它在工作(尽管时间不同)。或者调用
sleep
以确保主线程已终止。因为主线程已退出导致程序终止。您必须
join()
您的线程。@selbie和@KlausD,如果线程不是守护进程线程(它们不是守护进程线程),那么即使主线程终止,它们也应该继续运行。当我运行这个程序时,输入所有5个输入都没有问题。当我将
return ui
语句更改为
print(ui)
语句时,我看到了输入的内容。看到它在工作(尽管时间不同)。或者调用
sleep
以确保主线程已终止。答案的哪一部分缩进错误?开始、编码还是输出?
input(“您叫什么名字?”)
需要缩进,范围(5):中i的
下的三行需要缩进。你为什么不试着复制和粘贴你发布的内容,并在你被否决之前试着运行它。另外,据我所知,你的代码和OP之间的唯一区别是删除了
打印(“内部用户输入”)
和一条无害的
return
语句。正如我所评论的,我实际上发现OP的代码可以在我的Windows平台上运行。OP的代码挂在我的Windows 10上。Python-exe-dir、Python-script-dir、path和pathext有Python-adds、Python.\u pth有all-dir。我把它放到linux上运行了,不过上面说删除了star'n。另外,正在运行与python脚本目录中的其他脚本一起工作的脚本编辑器。我仍然在Windows 7上。答案的哪一部分有错误的缩进?开始、编码还是输出?
input(“您叫什么名字?”)
需要缩进,范围(5):
中i的
下的三行需要缩进。你为什么不试着复制和粘贴你发布的内容,并在你被否决之前试着运行它。另外,据我所知,你的代码和OP之间的唯一区别是删除了
打印(“内部用户输入”)
和一条无害的
return
语句。正如我所评论的,我实际上发现OP的代码可以在我的Windows平台上运行。OP的代码挂在我的Windows 10上。Python-exe-dir、Python-script-dir、path和pathext有Python-adds、Python.\u pth有all-dir。我把它放到linux上运行了,不过上面说删除了star'n。另外,正在运行与python脚本目录中的其他脚本一起工作的脚本编辑器。我仍然使用Windows7。