gpt4 book ai didi

python - 在Python中分析来自连续输入流(记录)的数据,多处理?

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:07 24 4
gpt4 key购买 nike

我正在实时分析来自麦克风录音的数据。到目前为止,我一直以线性方式进行此操作:

  • 记录一秒(耗时1s)
  • 分析数据(例如需要 50 毫秒)
  • 记录一秒
  • 分析数据

等等。这显然意味着当我分析过去一秒的数据时,我正在失去这 50 毫秒的时间,我不会在这期间记录声音。

我认为多处理是解决方案:我启动一个单独的进程,以一定长度的 block 不间断地记录,每次通过管道将其发送到主进程,然后主进程分析数据。不幸的是,通过管道发送大量数据(或者通常,将大量数据从一个进程发送到另一个进程)显然远非理想。还有其他方法吗?我只是想让我的电脑记录数据并将其导入 python(我已经在做的所有这些),同时它也在分析数据。

如果我需要添加更多详细信息,请告诉我!

谢谢!

最佳答案

简单的生产者/消费者实现。

虽然来回移动数据确实会导致开销并增加内存使用,但只要多个进程不需要相同的数据,开销就会最小。试试看:) 可以通过更改队列和池大小数字来调整内存占用量。

线程是减少内存使用的另一种选择,但代价是在 GIL 上被阻塞,如果处理是在 python 字节码中,则实际上是单线程的。

import multiprocessing
# Some fixed size to avoid run away memory use
recorded_data = multiprocessing.Queue(100)

def process(recorded_data):
while True:
data = recorded_data.get()
<process data>

def record(recorded_data):
for data in input_stream:
recorded_data.put(data)

producer = multiprocessing.Process(target=record,
args=(recorded_data,))
producer.start()

# Pool of 10 processes
num_proc = 10
consumer_pool = multiprocessing.Pool(num_proc)
results = []
for _ in xrange(num_proc):
results.append(
consumer_pool.apply_async(process,
args=(recorded_data,)))

producer.join()

# If processing actually returns something
for result in results:
print result
# Consumers wait for data from queue forever
# so terminate them when done
consumer_pool.terminate()

关于python - 在Python中分析来自连续输入流(记录)的数据,多处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com