我正在尝试制作一个类似于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

我需要怎么做才能连续提示用户输入,同时还根据需要从其他线程中打印出消息?

最佳答案

注意,Python 在调用函数之前先评估参数。因此,该行:

thread1 = threading.Thread(printSomething())

实际上等效于:
_temp = printSomething()
thread1 = threading.Thread(_temp)

现在也许更清楚了发生了什么-在Thread中永无止境的start循环开始之前,从未创建while,更不用说printSomething ed了。如果您切换了创建顺序,则会看到另一个循环。

相反,对于the documentation,您需要使用target参数进行设置



例如:
 thread1 = threading.Thread(target=printSomething)

请注意printSomething后没有括号-您还不想要调用它。

关于python - 模拟shell的多线程程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29150159/

10-09 01:09