0

我正在做一个小的客户端\服务器线程聊天,我遇到了一个问题,如果其中一方在输入一个消息时收到一条消息,它会破坏正在输入的消息这里是用于说明的图像

在此处输入图像描述

这是线程代码:

import threading
import socket
class sendTread(threading.Thread):
    def __init__(self,soc):
        threading.Thread.__init__(self,name='sender')
        self.s=soc
    def run(self):
        while True:
            self.s.send(bytes(str(input('>>> ')), 'UTF-8'))
            print('sent.')
class recvTread(threading.Thread):
    def __init__(self,soc):
        threading.Thread.__init__(self,name='recver')
        self.s=soc
    def run(self):
        while True:
            data=self.s.recv(1024)
            print('\nrecv:',str(data)[2:len(str(data))-1],end="\n>>> ")

我理解它为什么会发生,但我不知道如何解决它,我很乐意提供一些帮助和建议:)

4

1 回答 1

0

您必须将问题视为并发问题。在您的情况下,控制台是一个共享资源,正在发生的事情是接收者的线程正在使用它,而仍然被发送者“占用”。

您可以添加一个保护打印语句的锁,您可以在此处找到有关它的详细信息:http: //docs.python.org/2/library/threading.html#lock-objects

于 2013-09-05T11:31:03.263 回答