簡體   English   中英

您如何在子進程中中斷函數的執行,以使用Pyglet播放和暫停音頻?

[英]How do you interrupt execution of a function in a child process, to play and pause audio with Pyglet?

我正在用Python編寫一個應用程序(肯定不適合該任務,但無論如何我都在做)。 該應用程序的一部分需要一個音頻播放器,我正在使用它,因為它似乎最易於使用,並且會執行我需要的功能(加載OGG,MP3和WAV;播放音頻;暫停音頻) ;獲取當前時間戳記。

我知道我需要在一個單獨的子進程中運行音頻內容(或者,多進程處理這個問題,我想這是一個子進程)。 但是,運行pyglet.app.run()基本上會鎖定該過程,直到音頻播放完畢。 我看不到使進程暫停的方法,因為您無法從進程外部訪問進程的地址空間(因此,我無法運行該進程,然后再運行player.pause())。

總的來說,我有些困惑,不勝感激如何使多處理與Pyglet一起工作,以便我可以隨意播放和暫停音頻(這全部實現在GUI中,GUI處理了很多其他事情,好)。

像大多數GUI框架一樣,pyglet使用所謂的“事件循環”。 這是從pyglet.app.run()開始的事情。 實際上,它阻止了當前線程(而不是進程),並計划了GUI框架內發生的所有事件。 如果您想在兩者之間運行自己的東西,則必須通過事件循環來完成,請參閱https://pyglet.readthedocs.io/zh-CN/latest/programming_guide/time.html#guide-calling-functions-periodically

另外,您可以嘗試創建一個新線程(而不是進程),但是在訪問可能也從pyglet事件循環訪問的內容時,您必須小心。

GUI框架通常是單線程的,並且通常也不是線程安全的(我不了解有關pyglet的詳細信息)。 如果創建其他線程,則在與另一個線程的事件循環進行交互時必須非常小心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM