我正在尝试创建一个很像shell的Python程序:主要是等待用户输入,偶尔会显示来自另一个线程的消息。
考虑到这一点,我做了以下示例代码:
import threading
import time
def printSomething(something="hi"):
while True:
print(something)
time.sleep(2)
def takeAndPrint():
while True:
usr = input("Enter anything: ")
print(usr)
thread1 = threading.Thread(printSomething())
thread2 = threading.Thread(takeAndPrint())
thread1.start()
thread2.start()
我期望发生什么
提示用户输入;偶尔会导致输出消息,有时会先打printSomething
消息。
Enter anything:
hi
Enter anything: hello
hello
Enter anything:
hi
实际发生的事情
似乎只有printSomething
运行:
hi
hi
hi
如果需要连续提示用户输入,同时根据需要打印其他帖子的消息,我需要做什么?
答案 0 :(得分:4)
请注意,Python 在调用函数之前计算参数。因此,行:
thread1 = threading.Thread(printSomething())
实际上相当于:
_temp = printSomething()
thread1 = threading.Thread(_temp)
现在可能更清楚 - 在Thread
中的无休止的start
循环开始之前,永远不会创建while
,更不用说printSomething
了。如果您改变了创作顺序,那么您已经看到了另一个循环。
相反,根据the documentation,您需要使用target
参数来设置
调用的可调用对象
run()
方法
例如:
thread1 = threading.Thread(target=printSomething)
请注意printSomething
后没有括号 - 不想要调用它。