我有一个库,可以对音频文件执行某些操作。出于测试目的,我创建了一个python接口(使用boost :: python),现在尝试可视化一些数据。
当我尝试制作一些matplotlib图时,我面临以下问题:如果我用库读取媒体文件然后调用matplotlib.pyplot.show()
matplotlib UI在它出现后立即挂起:我看到情节但不能关闭/调整大小/与窗口交互,鼠标光标显示“忙轮”。
我发现导致此冻结的行(如果我return
在show()
工作正常之前就行了retrun
,如果show()
在下一行mReader = [[AVAssetReader alloc]initWithAsset:ass error:&mReaderError];
挂起):
PyEval_SaveThread
所以发生了什么:
[[AVAssetReader alloc]initWithAsset]
)PyEval_RestoreThread
被称为frame #0: 0x00007fff8b778ef8 CoreFoundation`CFRunLoopRunSpecific + 440
frame #1: 0x00007fff8d7287b7 HIToolbox`ReceiveNextEventCommon + 479
frame #2: 0x00007fff8d7285bc HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 65
frame #3: 0x00007fff8e48524e AppKit`_DPSNextEvent + 1434
frame #4: 0x00007fff8e48489b AppKit`-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
frame #5: 0x00007fff8e47899c AppKit`-[NSApplication run] + 553
frame #6: 0x00000001054b3fea _macosx.so`show + 218
frame #7: 0x00000001000997cc Python`PyEval_EvalFrameEx + 17823
frame #8: 0x000000010009d103 Python`fast_function + 203
)matplotlib挂起。 我很确定库代码本身很好(它经过测试并且在osx和ios上运行良好)但是在使用CoreAudio和“GUI中的某些东西”之间存在一些冲突。
这是被绞死过程的部分回溯:
{{1}}
任何想法有什么不对?
答案 0 :(得分:0)
这实际上不是答案,而是一种解决方法。它使事情有效但却太难以成为最终的解决方案。
如果在 AVAssetReader
之前使用了,则一切正常。我认为在这种情况下正确地初始化了一些东西。
此代码挂起:
data = native_module.get_data_using_coreaudio()
plt.plot(data)
plt.show()
但这不是:
plt.plot([0])
plt.show()
plt.cla()
data = native_module.get_data_using_coreaudio()
plt.plot(data)
plt.show()