我正在编写一个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甚至可能。我缺乏想法,所以: