在提示用户输入聊天程序的同时打印收到的消息

时间:2019-05-28 23:55:24

标签: python python-3.x multithreading

我正在使用Python创建聊天应用程序而不使用非标准库,并且在提示用户输入消息并通过消息时遇到了问题。

def printit():
    threading.Timer(5.0, printit).start()
    print("This is a test message!")

def prompt():
    while True:
        msg = input("Your Message: ")

def main():
    thread_prompt = threading.Thread(target = prompt)
    thread_prompt.start()
    printit()

虽然我希望收到的所有消息都显示在与提示不同的行上,但是此刻发生了什么(例如,用户正在尝试键入并发送“ hello world”):

Your Message: hello worThis is a test message!

虽然我希望它像以下内容:

This is a test message!
Your Message: hello wor

在不使用外部库的情况下是否可以实现?另外,我还没有实现将消息发回的套接字/服务器,因此现在我正在使用threading.Timer来模拟每5秒发送一次的消息。

1 个答案:

答案 0 :(得分:1)

我认为您不可以按此特定顺序(测试消息后跟提示)轻松地执行所需的操作,但是可以轻松实现相反的顺序(提示后跟测试消息)。 排队,而不是打印测试消息,然后在用户按下Enter键时打印所有排队的消息。

queue = []
lock = threading.Lock()

def printit():
    threading.Timer(5.0, printit).start()
    lock.acquire()
    queue.append("This is a test message!")
    lock.release()

def prompt():
    global queue
    while True:
        msg = input("Your Message: ")      
        lock.acquire()
        while queue:
            print(queue.pop())
        lock.release()

def main():
    thread_prompt = threading.Thread(target = prompt)
    thread_prompt.start()
    printit()