同时打印到控制台和 raw_input
Printing to console and raw_input at the same time
我有一个 client.py 和一个 server.py。客户端偶尔会收到来自服务器的消息。客户端也可以向服务器发送消息。
因为raw_input出现阻塞主线程,客户端收到服务器消息时,无法打印到控制台,需要raw_input先完成
我尝试使用多线程来解决这个问题,但在下面的代码中,甚至没有调用 raw_input。以下为client.py
import socket
import sys
import threading
BUFFER_SIZE = 1024
def listen_for_server_response(s):
while 1:
data = s.recv(BUFFER_SIZE)
print(data)
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
thread = threading.Thread(target = listen_for_server_response(s))
thread.start()
while 1:
command = raw_input("Command: ")
s.send(command)
if __name__ == "__main__":
main()
非常感谢任何帮助!
这似乎是个糟糕的设计,但您需要使用可调用函数来调用线程
thread = threading.Thread(target = listen_for_server_response,args=(s,))
thread.start()
通过像示例中那样调用它,您将在线程启动之前调用它并永远循环...您甚至无法到达 thread.start
我有一个 client.py 和一个 server.py。客户端偶尔会收到来自服务器的消息。客户端也可以向服务器发送消息。
因为raw_input出现阻塞主线程,客户端收到服务器消息时,无法打印到控制台,需要raw_input先完成
我尝试使用多线程来解决这个问题,但在下面的代码中,甚至没有调用 raw_input。以下为client.py
import socket
import sys
import threading
BUFFER_SIZE = 1024
def listen_for_server_response(s):
while 1:
data = s.recv(BUFFER_SIZE)
print(data)
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
thread = threading.Thread(target = listen_for_server_response(s))
thread.start()
while 1:
command = raw_input("Command: ")
s.send(command)
if __name__ == "__main__":
main()
非常感谢任何帮助!
这似乎是个糟糕的设计,但您需要使用可调用函数来调用线程
thread = threading.Thread(target = listen_for_server_response,args=(s,))
thread.start()
通过像示例中那样调用它,您将在线程启动之前调用它并永远循环...您甚至无法到达 thread.start