如何在子进程中中断函数的执行,使用Pyglet播放和暂停音频?

问题描述 投票:0回答:1

我正在用Python编写一个应用程序(绝对不适合这个任务,但无论如何我都在做)。该应用程序的一部分需要一个音频播放器,我正在使用Pyglet,因为它似乎是最容易使用的,并做我需要它能够做的事情(加载OGG,MP3和WAV;播放音频;暂停音频;获取当前时间戳)。

我知道我需要在一个单独的子进程中运行音频内容(或者多进程处理这个,我想是一个子进程)。但是,运行pyglet.app.run()实际上会锁定进程,直到音频播放完毕。我无法看到让进程暂停的方法,因为您无法从进程外部访问进程的地址空间(因此我无法运行该进程然后运行player.pause())。

我只是有点难以理解,并希望了解如何使用Pyglet进行多处理,这样我就可以随意播放和暂停音频(这些都是在GUI中实现的,它可以处理一大堆其他事情,如:好)。

python audio python-multiprocessing pyglet
1个回答
0
投票

像大多数GUI框架一样,pyglet使用所谓的“事件循环”。这是从pyglet.app.run()开始的事情。它确实阻止了当前线程(不是进程)并调度了GUI框架内发生的所有事件。如果你想在中间运行你自己的东西,你必须通过事件循环来做,请参阅https://pyglet.readthedocs.io/en/latest/programming_guide/time.html#guide-calling-functions-periodically

或者,您可以尝试创建一个新线程(而不是进程),但是在访问可能也从pyglet事件循环访问的内容时您必须小心。

GUI框架通常是单线程的,通常不是线程安全的(我不知道pyglet的细节)。如果您创建了一个额外的线程,则在与另一个线程的事件循环交互时必须非常小心。

© www.soinside.com 2019 - 2024. All rights reserved.