我需要通过套接字发送图像,并且需要尽快完成。图像表示为 3d numpy 数组。发送的数据可以达到 500000 字节以上。到目前为止,我是这样做的:array_data_type = image.dtype.namearray_shape = image.shapeto_send = array_data_shape + SEPARATOR + cPickle.dumps(array_shape) + SEPARATOR + image.tobytes()streaming_socket.sendall(to_send)连接现在大约需要 0.044 秒,我希望它更快。可以更快吗?
1 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
使用该join方法创建单个str结果,而不是在str评估每个+操作时创建一系列临时对象。
to_send = SEPARATOR.join([array_data_shape, cPickle.dumps(array_shape), image.tobytes()])
您当前的代码相当于
tmp1 = array_data_shape + SEPARATOR
tmp2 = tmp1 + cPickle.dumps(array_shape)
tmp3 = tmp2 + SEPARATOR
to_send = tmp3 + image.tobytes()
并且每个+都必须将它的两个参数复制到str它构造的新参数中。运行时间是最终结果长度的二次方*,而SEPARATOR.join线性。
* 假设你加入的东西大小大致相等,无论如何。严格来说,每个+参数的大小都是线性的,单个项目被复制的次数与它的剩余距离成正比。假设xi表示i第 th 个字符串的大小,则完成的总工作为(x1 + x2) + (x1 + x2 + x3) + ... + (x1 + x2 + ... + xn)。
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消