Многопроцессорная обработка с PyAudio и Tkinter в Python не работает на Mac OS X - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь создать приложение с графическим интерфейсом, которое одновременно включает в себя обработку изображений и аудио, используя библиотеку multiprocessing .Однако тот же код при тестировании в 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, а также печатает Задача выполнена , когда оператор импорта смещен, что не является хорошим решением, так как мне потребуется запустить многопроцессорную обработку после инициализации пользовательского интерфейса.

Есть ли способ обойти эту проблему?

1 Ответ

0 голосов
/ 31 марта 2019

Было бы неплохо, если бы мы знали, что именно это за ошибка, поэтому, если бы вы могли скопировать ее, было бы неплохо. ^^ В любом случае, у меня нет опыта работы с multiprocessing.Process, поэтому я использую threading.Thread. Поэтому я определяю новый класс с Thread как метакласс и определяю, какой должна быть запущенная функция, как run. e.g.:

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

...