我有一个cPickle错误,不知道他的意思也许有人知道这意味着什么?

2024-10-02 00:37:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用过程通信RMC,其代码如下:

    HOST = ''     # local host
    PORT = 50000
    SERVER_ADDRESS = HOST, PORT

    # set up server socket
    s = socket.socket()
    s.bind(SERVER_ADDRESS)
    s.listen(1)

    while True:
        conn, addr = s.accept()
        connFile = conn.makefile()
        name, args, kwargs = cPickle.load(connFile)
        '''name = cPickle.load(connFile)
        args = cPickle.load(connFile)
        kwargs = cPickle.load(connFile)'''
        res = _exportedMethods[name](*args,**kwargs)
        cPickle.dump(res,connFile) ; connFile.flush()
        conn.close()

这是客户端站点:

^{pr2}$

执行后,我收到以下错误消息:

Traceback (most recent call last):
  File "/home/manch011/disserver/src/disserver/gui/backends/receiver.py", line 71, in run
    args = cPickle.load(connFile)
cPickle.UnpicklingError: pickle data was truncated

在我的更改之后,我收到以下错误消息:

Traceback (most recent call last):
File "/home/manch011/disserver/src/disserver/gui/backends/receiver.py", line 69, in run
name, args, kwargs = cPickle.load(connFile)
EOFError

我不熟悉cPickle,因此无法理解这一点,有人能给我解释一下吗?在

提前谢谢 奇斯


Tags: namehostserverportaddress错误argsload
1条回答
网友
1楼 · 发布于 2024-10-02 00:37:59

当您在类似文件的对象(connFile = conn.makefile())中转换套接字时,您在套接字中的所有内容都可以在文件中使用。当您第一次执行cPickle.load(connFile)操作时,socket/文件中的所有内容都由pickle加载,所以在第二次调用时,没有任何东西可以取消拾取,这就是pickle在引发异常时所抱怨的。在

您的所有数据在第一个cPickle.load(connFile)处取消拾取,如果要提取函数名、args和kwargs,请尝试发送包含这些数据的元组:

客户端:

cPickle.dump((function_name, args, kwargs), client_socket_as_file)

服务器端

^{pr2}$

相关问题 更多 >

    热门问题