簡體   English   中英

在Python multiprocessing.Process中,我們是否必須使用`__name__ == __main__`?

[英]In Python multiprocessing.Process , do we have to use `__name__ == __main__`?

我正在編寫一個支持易於使用的API的類,以添加不同的設置以運行給定程序( class.add(args) )並使用多處理程序對所有設置進行基准測試( class.benchmark(num_processes=5) )。

從multiprocessing.Process的文檔中,似乎所有情況都使用if __name__ == '__main__' 跳過使用安全嗎?

例如,類方法benchmark(num_processes=5)啟動並加入進程,另一個python文件file.py創建一個類,只需調用class.benchmark(num_processes=5) 它會照常工作嗎?

if __name__ == '__main__':用於指示加載模塊時要運行的代碼。 基本上,在將其作為腳本運行或作為庫導入時都將其加載。 在第一種情況下,通常會編寫它,以便所有編寫的代碼都能執行,因此不必包含它。 但是,當您編寫庫時,可能會有一些其他人導入時不會運行的代碼,例如簡短的示例或測試。 因此,在后一種情況下,您肯定要包括它。

為了從上面的評論中回答您的問題,我認為將它包含在類方法中沒有意義,因為它是頂級構造,因此始終會加載。

多處理指南中 “安全導入主模塊”標題下所述,某些形式的多處理需要導入主模塊,因此,如果__name__ == '__main__'檢查,則程序可能會在fork炸彈中運行。 特別是在Windows中,CPython無法進行分叉 因此,跳過它是不安全的。 測試屬於模塊的頂級(全局)級別,而不屬於某些類。 其目的是阻止模塊在導入時自動運行任務(與定義類,函數等相反),而不是直接運行。

暫無
暫無

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

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