模拟shell的多线程程序

时间:2015-03-19 16:35:39

标签: python multithreading python-3.x python-multiprocessing

我正在尝试创建一个很像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

如果需要连续提示用户输入,同时根据需要打印其他帖子的消息,我需要做什么?

1 个答案:

答案 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后没有括号 - 想要调用它。