亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我可以觸發并忘記提交到線程池的可調用對象嗎?

我可以觸發并忘記提交到線程池的可調用對象嗎?

慕田峪4524236 2023-08-15 16:49:10
在我的 Python 3 應用程序中,我必須處理許多不應阻塞主線程的小型(同時)I/O 任務,因此我想利用線程池:from concurrent.futures import ThreadPoolExecutorclass MyApp:    def __init__(self):        self.app_thread_pool = ThreadPoolExecutor()    def submit_task(self, task):        self.app_thread_pool.submit(MyApp.task_runner, task)    @staticmethod    def task_runner(task):        # Do some stuff with the task, save to disk, etc.這工作正常,作業正在線程池的線程中提交和啟動,任務執行它們應該執行的操作?,F在,閱讀該concurrent.futures模塊的文檔,似乎該模塊/線程池將與Future對象一起使用,以便處理提交任務的結果。然而,就我而言,我對這些結果不感興趣,我想解雇并忘記我的任務,他們能夠處理自己。所以我的問題是:我是否必須使用 futures,或者我可以簡單地執行submit()一個任務,如上所示,并忽略Future從作業提交返回的任何對象?我問的是內存和資源管理方面。請注意,我也不想使用該with語句來使用線程池,如文檔中所述,因為我在應用程序的整個生命周期中都需要這個線程池,并且啟動線程池的主線程還有許多其他事情要做...
查看完整描述

1 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

不,您當然不必使用返回的Future對象。正如您所發現的,您的代碼似乎可以在不這樣做的情況下正常工作。這只是可觀察性穩健性的問題。

保留Futures 可以讓您跟蹤已提交的任務。您可以了解他們何時完成、檢索結果、取消任務等。這對于了解任務的進展情況非常重要。

但密切關注任務的一個可以說更重要的原因是為了穩健性。如果其中一項任務失敗怎么辦?您可能想以某種方式重試。請注意,很少有任務不會失敗。你說你的任務是“I/O”,這是一個失敗很常見的典型例子,只有在你嘗試了一些東西之后才知道。

因此,雖然沒有什么強迫您跟蹤未來,但您可能應該這樣做,特別是如果您需要一個強大的、長期運行的應用程序。


查看完整回答
反對 回復 2023-08-15
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號