小编Mat*_*att的帖子

将ctype字节数组转换为字节

我有一个我这样定义的ctypes数组:

buff= (c_ubyte*buff_size)()
Run Code Online (Sandbox Code Playgroud)

在用数据填充缓冲区之后,我需要以字节格式存储这些数据.现在我正在做如下:

buff= [n for n in buff]
buff = ''.join(map(chr, buff))
Run Code Online (Sandbox Code Playgroud)

这个问题是它将它转换为4字节(或任意数量的字节)int,然后再将其转换回单字节字符串,这会浪费大量的CPU.

如何将ctypes缓冲区直接转换为字节?我不是想保存自己的副本,因为我无论如何都要做副本,因为我无法保留原始缓冲区.python是否有针对此类事物的强制转换功能?

谢谢.

ctypes python-2.7

10
推荐指数
1
解决办法
2万
查看次数

在x秒后写入多个文件会变慢

我有代码从相机获取帧然后将其保存到磁盘.代码的结构是:多个线程malloc并将它们的帧复制到新的内存中,将内存排入队列.最后,另一个线程从队列中删除帧并将它们(使用ffmpeg API,原始视频无压缩)写入其文件(实际上我使用自己的内存池,因此只在需要更多缓冲区时调用malloc).我可以同时打开多达8个文件/摄像头.

问题是,在前45秒内一切正常:队列上永远不会有多个帧.但是在我的队列被备份之后,处理只需要几毫秒的时间就会导致ram的使用量增加,因为我无法快速保存帧,因此我必须使用malloc更多的内存来存储它们.

我有一个8核,16GB RAM Windows 7 64位计算机(NTFS,第二个磁盘驱动器中有大量可用空间).该磁盘应该能够写入高达6Gbits/sec.为了及时保存我的数据,我需要能够以50 MB /秒的速度写入数据.我使用"PassMark PerformanceTest"测试了磁盘速度,我有8个线程同时写文件,就像ffmpeg保存文件(同步,未缓存的I/O)一样,它能够达到100MB /秒.那么为什么我的写作不能实现呢?

以下是ffmpeg写入处理监视器日志的方式:

 
Time of Day     Operation   File#   Result  Detail
2:30:32.8759350 PM  WriteFile   8   SUCCESS Offset: 749,535,120, Length: 32,768
2:30:32.8759539 PM  WriteFile   8   SUCCESS Offset: 749,567,888, Length: 32,768
2:30:32.8759749 PM  WriteFile   8   SUCCESS Offset: 749,600,656, Length: 32,768
2:30:32.8759939 PM  WriteFile   8   SUCCESS Offset: 749,633,424, Length: 32,768
2:30:32.8760314 PM  WriteFile   8   SUCCESS Offset: 749,666,192, Length: 32,768
2:30:32.8760557 PM  WriteFile   8   SUCCESS Offset: 749,698,960, Length: 32,768
2:30:32.8760866 PM  WriteFile   8   SUCCESS Offset: …

c++

8
推荐指数
1
解决办法
1355
查看次数

如何获取“安全”和“往返”的类似格式的 yaml

ruamel.yaml根据是否使用saferound-trip表示器,以不同的方式格式化简单但嵌套的字典。

我不明白为什么不同的代表者应该以不同的方式格式化这样一个简单的字典,所以我想知道如何让代表safe者看起来与round-trip以下示例中的相似:

from ruamel.yaml import YAML
import sys

data = {'data': {'interval': 5, 'compression': '3'}, 'player': {'ffmpeg': {'name': 'me'}}}
yaml = YAML(typ='safe')
yaml.dump(data, sys.stdout)
Run Code Online (Sandbox Code Playgroud)

这打印

data: {compression: '3', interval: 5}
player:
  ffmpeg: {name: me}
Run Code Online (Sandbox Code Playgroud)

data: {compression: '3', interval: 5}
player:
  ffmpeg: {name: me}
Run Code Online (Sandbox Code Playgroud)

打印出更好的输出:

data:
  interval: 5
  compression: '3'
player:
  ffmpeg:
    name: me
Run Code Online (Sandbox Code Playgroud)

如何获得safe打印相似度的版本?

yaml ruamel.yaml

5
推荐指数
1
解决办法
1505
查看次数

标签 统计

c++ ×1

ctypes ×1

python-2.7 ×1

ruamel.yaml ×1

yaml ×1