我制作了一個基于調度程式的下載器。所以我想在早上 6 點之前開始下載檔案并停止。我設法使用從上午 12 點開始的 apscheduler 實作了這一點,但我不確定如何在上午 6 點終止所有任務。我正在做多執行緒,因為我需要在早上 6 點之前下載盡可能多的東西。我嘗試exit在早上 6 點安排 a,但它不會停止執行緒,只會退出當前執行緒。我想在早上 6 點之前退出所有執行緒。這是我嘗試過的代碼::
executor = ThreadPoolExecutor(max_workers=multiprocessing.cpu_count() * 5)
urls = [...] # list of all urls
def download(url):
... # downloader here
def main_download():
futures = [executor.submit(download, url) for url in urls]
for future in as_completed(futures):
... # do something
scheduler = apscheduler.schedulers.background.BlockingScheduler(timezone="Asia/Kolkata")
job = scheduler.add_job(main_download, trigger="cron", hour=12)
def kill_all(): # kill everything
job.remove()
scheduler.remove_all_jobs()
scheduler.shutdown()
quit(1)
# already tried exit, raise keyboard interrupt, sys.exit
scheduler.add_job(kill_all, trigger="cron", hour=6) # kill everything
scheduler.start()
但它仍然繼續下載所有內容,有沒有什么好的方法可以停止所有執行緒?由于這存在僅當前執行緒和其他行程繼續運行。
uj5u.com熱心網友回復:
最好的解決方案可能是使用os._exit(n). 退出、退出,甚至 sys.exit 引發SystemExit僅終止當前執行緒并且可以被處理程式捕獲。asos._exit(n)退出代碼而不呼叫清理處理程式,重繪 stdio 緩沖區。因此,您的解決方案可能只是在使用,os._exit(n)但請注意,這不是退出的好方法,只能在特殊情況下使用。所以要小心使用。
它們中的每一個之間的區別已經在下面的stackoverflow執行緒中進行了簡要說明
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/532707.html
上一篇:THRUSTstable_sort_by_keyO(n)嗎?
下一篇:在執行緒中運行函式(多執行緒)
