【问题标题】:PyAudio and Matplotlib crash when used togetherPyAudio 和 Matplotlib 一起使用时崩溃
【发布时间】:2021-01-13 22:52:10
【问题描述】:

运行以下代码:

import threading
import pyaudio
from matplotlib import pyplot as plt

def output():
    p = pyaudio.PyAudio()

    stream_ = p.open(format=pyaudio.paFloat32,
                    channels=1,
                    rate=8000,
                    output=True)

    stream_.stop_stream()
    stream_.close()
    p.terminate()


output_thread = threading.Thread(target=output, args=())
output_thread.start()
output_thread.join()

fig = plt.figure()
ax0 = fig.add_subplot(111)
ax0.plot([1,2,3])
plt.show()

导致 Python 崩溃并出现以下错误。我该如何解决这个问题?我正在运行 Python 3.8、PyAudio 0.2.11 和 Matplotlib 3.3.1 以及 Mac Os 版本 10.15.5。

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [4840]

Application Specific Information:
The current event queue and the main event queue are not the same. This is probably because _TSGetMainThread was called for the first time off the main thread. _TSGetMainThread was called for the first time here: 
0   CarbonCore                          0x00007fff36993345 _TSGetMainThread + 138
1   CarbonCore                          0x00007fff3699324a GetThreadGlobals + 26
2   CarbonCore                          0x00007fff3699d5e4 NewPtrClear + 14
3   CarbonCore                          0x00007fff369b4aba AVLInit + 62
4   CarbonCore                          0x00007fff369b49f1 __INIT_Folders_block_invoke + 9
5   libdispatch.dylib                   0x00007fff6f603658 _dispatch_client_callout + 8
6   libdispatch.dylib                   0x00007fff6f6047de _dispatch_once_callout + 20

【问题讨论】:

    标签: python macos matplotlib pyaudio


    【解决方案1】:

    好的,如果我运行:

    fig = plt.figure()
    

    在创建线程之前,我可以避免这种崩溃。我猜这允许我第一次在主线程上调用 _TSGetMainThread。

    【讨论】:

      猜你喜欢
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      相关资源
      最近更新 更多