如何从Tornado提供二进制数据?

时间:2012-08-20 11:48:16

标签: python tornado binary-data

我有一个numpy数组,我想使用Tornado服务,但当我尝试使用self.write(my_np_array)编写它时,我只得到一个AssertionErrror。

我做错了什么?

File "server.py", line 28, in get
self.write(values)
File "/usr/lib/python2.7/site-packages/tornado/web.py", line 468, in write
chunk = utf8(chunk)
File "/usr/lib/python2.7/site-packages/tornado/escape.py", line 160, in utf8
assert isinstance(value, unicode)

1 个答案:

答案 0 :(得分:1)

不完全确定你的目标是什么,但如果你想获得你可以做的对象的字符串表示

self.write(str(your_object))

如果要将numpy数组作为python对象提供,以便在不同的客户端上使用它,则需要首先对该对象进行pickle

import pickle
self.write(pickle.dumps(your_object))

然后可以使用

检索对象
your_object = pickle.loads(sent_object)

请记住,从不受信任的来源中取消对象是危险的,因为它可能会导致恶意代码执行。

修改

如果要传输numpy数组并在javascript中使用它,则不需要二进制表示。

只需将numpy数组转换为列表

即可
your_numpy_list = your_numpy_object.tolist()

并将其转换为json

import json
self.write(json.dumps(your_numpy_list))

在javascript端你只需解析结果字符串

var result = JSON.parse(resultString)

并从中创建类型化数组

var typedResult = new Float32Array(result)

瞧!