在Mac OS X上无法使用Python中的PyAudio和Tkinter进行多重处理

时间:2019-03-31 09:26:49

标签: python tkinter multiprocessing python-multiprocessing pyaudio

我正在尝试使用 multiprocessing 库制作同时包含图像和音频处理的GUI应用程序。但是,在Mac OS X上测试时,相同的代码似乎不起作用,除非删除 import tkinter 语句

import pyaudio
# The import statement below is causing the problem
import tkinter as tki
import multiprocessing
import threading

def do_task():
    p = pyaudio.PyAudio()
    print("Task complete")

if __name__ == '__main__':
    p = multiprocessing.Process(target=do_task, args=())
    p.start()
    # Code works when import statement is placed here
    # import tkinter as tki
    p.join()

上面的代码在Windows上打印任务完成,并且在导入语句移位时也打印任务完成,这不是一个很好的解决方案,因为我需要开始初始化UI后进行多重处理。

有没有解决此问题的方法?

1 个答案:

答案 0 :(得分:0)

如果我们确切地知道错误是什么,那将是很好的,因此,如果您可以复制它,那就很好了。 ^^ 无论如何,我在multiprocessing.Process上也没有很好的经验,所以我改用threading.Thread。因此,我定义了一个以Thread作为元类的新类,并将正在运行的函数定义为run。 例如:

from threading import Thread

class Audio(Thread):
    def __init__(self,...):
        Thread.__init__(self)
        #...
    def run(self):
        #audio stuff

class GUI(Thread):
    def __init__(self,...):
        Thread.__init__(self)
        #...
    def run(self):
        #GUI stuff
a,g=Audio(),GUI()
a.start(),g.start()

我不知道这是否真的有帮助,但我希望如此。 :D