Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t pickle<;类型';cStringIO.StringO'>;:使用多线程模块时,属性查找cStringIO.StringO失败错误_Python_Python 2.7 - Fatal编程技术网

Python Can';t pickle<;类型';cStringIO.StringO'>;:使用多线程模块时,属性查找cStringIO.StringO失败错误

Python Can';t pickle<;类型';cStringIO.StringO'>;:使用多线程模块时,属性查找cStringIO.StringO失败错误,python,python-2.7,Python,Python 2.7,因此,在打印了主机名和stdout.read()之后,我会得到如下错误 def execute_on_host((hostname, command), username=config['username'], keyfile=config['keyfile']): print hostname ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAd

因此,在打印了
主机名
stdout.read()
之后,我会得到如下错误

def execute_on_host((hostname, command), username=config['username'], keyfile=config['keyfile']):

    print hostname
    ssh_client = paramiko.SSHClient()
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh_client.connect(hostname=hostname, username=username, key_filename=keyfile)
    stdin, stdout, stderr = ssh_client.exec_command(command)
    print stdout.read()
    ssh_client.close()
    return stdout
我不知道如何解决这个问题

from multiprocessing import Pool
pool = Pool(len(host_cmds_list))
pool.map(execute_on_host, host_cmds_list)
pool.close()
pool.join()

您的
stdout
是一个
cStringIO
对象,它不能被pickle。尝试返回它的内容,而不是对象本身。

您的
stdout
是一个
cStringIO
对象,不能被pickle。尝试返回它的内容而不是对象本身。

主机cmds列表的内容是什么?它应该只包含可拾取的对象,即您应该能够无错误地运行
cPickle.dumps(host\u cmds\u list)
。此函数是在哪里定义的?顺便说一句,变量的值是
[('hostname1','/bin/date'),('hostname2','/bin/date')]
。另外,我不确定
cpickle.dumps
是否正确,但是
pickle.dumps
运行时没有任何错误。您的
stdout
是无法pickle的cStringIO对象。尝试返回它的内容,而不是对象本身。@Wessie就是它。谢谢你可以加上这个作为答案,这样我就可以接受了。
cPickle
(注意大写字母“p”)就是pickle的更快的C实现。传递给多处理函数和从多处理函数传递来的所有值都必须是可拾取的。
host\u cmds\u list
的内容是什么?它应该只包含可拾取的对象,即您应该能够无错误地运行
cPickle.dumps(host\u cmds\u list)
。此函数是在哪里定义的?顺便说一句,变量的值是
[('hostname1','/bin/date'),('hostname2','/bin/date')]
。另外,我不确定
cpickle.dumps
是否正确,但是
pickle.dumps
运行时没有任何错误。您的
stdout
是无法pickle的cStringIO对象。尝试返回它的内容,而不是对象本身。@Wessie就是它。谢谢你可以加上这个作为答案,这样我就可以接受了。
cPickle
(注意大写字母“p”)就是pickle的更快的C实现。传递给多处理函数和传递自多处理函数的所有值都必须是可拾取的。
from multiprocessing import Pool
pool = Pool(len(host_cmds_list))
pool.map(execute_on_host, host_cmds_list)
pool.close()
pool.join()
print host_cmds_list
[('hostname1', '/bin/date'), ('hostname2', '/bin/date')]