不卷没饭吃 2023-12-19 13:40 采纳率: 0%
浏览 7

attributeerror:'PipeConnection' object has no attribute '_send_bytes'

这是我的代码:import selectors
import pickle
class SimpleQueue(object):

def __init__(self, *, ctx):
    self._reader, self._writer = connection.Pipe(duplex=False)
    self._rlock = ctx.Lock()
    self._selector = selectors.DefaultSelector()
    self._selector.register(self._reader, selectors.EVENT_READ)
    if sys.platform == 'win32':
        self._wlock = None
    else:
        self._wlock = ctx.Lock()

def poll(self, timeout=None):
    """Check if the queue is readable within the given timeout"""
    events = self._selector.select(timeout)
    return bool(events)

def recv(self):
    """Receive data from the queue"""
    return self._reader.recv()

def send(self, obj):
    """Send data into the queue"""
    self._writer.send(obj)

def empty(self):
    events = self._selector.select(0)  # 0 表示立即返回结果,不阻塞
    return not events

def __getstate__(self):
    context.assert_spawning(self)
    return (self._reader, self._writer, self._rlock, self._wlock)

def __setstate__(self, state):
    (self._reader, self._writer, self._rlock, self._wlock) = state


def get(self):
    with self._rlock:
     res = self._reader._recv_bytes()
    # unserialize the data after having released the lock
     return pickle.loads(res)

def put(self, obj):
    # serialize the data before acquiring the lock
    obj = pickle.dumps(obj)
    if self._wlock is None:
        # writes to a message oriented win32 pipe are atomic
        self._writer._send_bytes(obj)
    else:
        with self._wlock:
            self._writer._send_bytes(obj)

报错信息为self._writer._send_bytes(obj)
AttributeError: 'PipeConnection' object has no attribute '_send_bytes'
请问该如何修改

  • 写回答

1条回答 默认 最新

  • 小孟多 2023-12-19 15:15
    关注

    根据您提供的代码和报错信息,问题出在self._writer._send_bytes(obj)这一行。根据错误信息,PipeConnection对象没有_send_bytes属性。

    这个问题可能是因为您使用的_send_bytes方法在新版本的Python中已被废弃或移除。为了解决这个问题,您可以尝试使用send_bytes方法来替代_send_bytes。

    请尝试将self._writer._send_bytes(obj)修改为self._writer.send_bytes(obj),然后再运行代码看看是否能够解决问题。

    修改后的代码片段如下:

    def put(self, obj):
        # serialize the data before acquiring the lock
        obj = pickle.dumps(obj)
        if self._wlock is None:
            # writes to a message oriented win32 pipe are atomic
            self._writer.send_bytes(obj)
        else:
            with self._wlock:
                self._writer.send_bytes(obj)
    
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 12月19日

悬赏问题

  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥15 python爬取bilibili校园招聘网站
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件