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