我對Python編程還很陌生,線程不是我的專業領域。我有一個問題,我希望這裏的人可以幫助我。線程完成時通知主線程
任務:作爲我的碩士論文的一部分,我需要製作一個涉及多人遊戲能力的混合現實遊戲。在我的遊戲設計中,每個玩家可以設置一組陷阱,其中每個陷阱都在特定時間段內有效,例如, 30秒。爲了在所有玩家中保持一致的遊戲狀態,所有的時間檢查都需要在服務器端完成,這是用Python實現的。
我決定啓動一個python線程,每次玩家放置一個新的陷阱並在線程上運行一個定時器。所有這一切都很好,但真正的問題出現時,我需要通知主線程,時間到了這個特定的陷阱,所以我可以溝通相同的客戶端(Android設備)。
我嘗試創建一個隊列,並在任務完成時將信息插入到隊列中,但我無法做一個queue.join(),因爲它會將主線程置於保持狀態直到任務完成,這不是我需要的也不是理想的,因爲主線始終與客戶溝通,如果停止,那麼與球員的所有溝通都將陷入停滯。
我需要運行定時器的輔助線程來告訴主線程,一旦時間用完,時間已經用完併發送陷阱的ID,以便我可以傳遞這些信息給android客戶端刪除它。我怎麼能做到這一點?
就如何實現這一任務,可以在不啓動一個極大的線程來實現任何其他建議,也歡迎.. :) :)
在此先感謝您的幫助..
乾杯
感謝您的快速回復..我一定會看看堆的想法,看看我是否可以在我的情況下使用它。我有一個問題,但關於多線程的想法: – vivek86
什麼時候我應該精確地做q.get()?因爲所有線程都在同時運行,我是否需要在主線程中編寫一個無限循環,不斷檢查所有線程以及它們是活着還是死掉,然後從它們獲取信息? 我想要或想到的東西是某種通知給主線程的東西。對於例如假設有10個線程正在運行,除了主線程都在不同的時間和不同的持續時間開始。並假設thread_4的計時器剛剛用完,它應該通知主線程它的時間到了。 – vivek86
@ vivek86隊列是所有線程之間共享的生產者 - 消費者隊列。工作者線程是生產者 - 當他們的計時器用完時他們調用'q.put(timer_info)'。也就是說,隊列是您的通知機制。主線程與我所描述的單線程案例有一個非常相似的循環 - 它將所有內容依次從隊列中取出並處理。它不需要檢查每個線程,甚至不需要知道有多少線程正在運行 - 一旦線程通過隊列發送了通知,它就沒有其他任何操作可以退出(除非您重用它們以提高效率)。 – lvc