2
所以我正在学习套接字编程,并写了一个漂亮的小聊天服务器。我遇到的问题是我的客户端无法同时读写。我不太清楚如何设置。Python多线程,同时运行两个函数
这就是我到目前为止,我想要read()和write()同时运行(它不是关于同时读取和写入 - 它是关于能够在输入时接收消息()挂起等待用户输入。):
import socket
import threading
class Client(threading.Thread):
def __init__(self):
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect(('127.0.0.1', 1234))
print('Client connected to server')
self.readThread = threading.Thread.__init__(self)
self.writeThread = threading.Thread.__init__(self)
def read(self):
data = self.socket.recv(1024)
if data:
print('Received:', data)
def write(self):
message = input()
self.socket.send(bytes(message, 'utf-8'))
client = Client()
while True:
#do both
您将要创建两个单独的线程对象来进行读取和写入。如果您的套接字实现不是线程安全的,那么您必须添加一个锁定原语,或者可能是一个将读写请求排入套接字的系统。或者你可以使用两个插座,一个用于阅读,一个用于写作。 – 2012-07-28 02:55:28
感谢您的回复。 与其同时阅读和写作没有多大关系 - 它是关于在input()挂起等待用户输入时能够接收消息。 想法? – puttputt 2012-07-28 03:25:04
从[docs](http://docs.python.org/library/socket.html#socket-objects)看来,'socket'具有非阻塞模式。线程可能是不必要的。 – 2012-07-28 03:40:03