一个线程的计算繁重工作破坏了另一个线程与Python中声卡的交互

时间:2017-05-10 08:16:44

标签: python-multithreading throttling pyaudio

我正在编写一个python 3.6应用程序,它大量使用线程(作为设计模式,与queue.Queue链接的线程的有向图形作为边缘)并且它工作正常。

一个线程使用带有pyaudio的声卡并缓冲样本输出(任何时候都有所需的样本),一个线程使用sklearn的{ {1}},有时需要进行繁重的计算工作(高CPU要求,~30%,高内存要求,~8Mb)。

当后一个线程中运行繁重的计算工作时,我从声卡中得到IncrementalPCA,就像第一个线程没有正好缓冲一样(但它确实缓冲好了,样本是发生欠载时准备发送。)

两个线程之间没有互斥锁也没有同步代码,它们是两个独立的代码片段。 当我将计算繁重的工作减少2倍时,一切正常,得到类似~15%的CPU,线程占用4Mb的内存。

由于(snd_pcm_recover) underrun occurred的{​​{1}}花费大部分时间使用sklearn并且因为我使用python 3.6,我不认为问题是related to Python's GIL,但我可能误解了一些事情。

我考虑过限制后一个线程的繁重计算工作,但似乎unlikely甚至可能。我缺乏想法,所以:

  • 如何让第一个线程使用后一个线程而不会出现欠载

0 个答案:

没有答案