Skip to main content
 首页 » 编程设计

Python多线程,同时运行两个函数

2024年08月30日32mayingbao

所以我正在学习套接字编程并编写了一个漂亮的小聊天服务器。我遇到的问题是我的客户不能同时读写。我不太确定如何进行设置。

这就是我目前所拥有的,我希望 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 

请您参考如下方法:

你真的很接近。尝试这样的事情:

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') 
 
        t = threading.Thread(target = self.read) 
        t.daemon = True # helpful if you want it to die automatically 
        t.start() 
 
        t2 = threading.thread(target = self.write) 
        t2.daemon = True 
        t2.start() 
 
    def read(self): 
        while True: 
            data = self.socket.recv(1024) 
            if data: 
                print('Received:', data) 
 
    def write(self): 
        while True: 
            message = input() 
            self.socket.send(bytes(message, 'utf-8')) 
 
 
client = Client() 

值得指出的是,如果您从单个终端读取和写入这种方式,您的提示可能会有点失控。我想虽然您从打印语句开始,但最终会将数据收集到您应用程序的其他容器中。