[英]Understanding a key difference between multiprocessing and threading in Python
我編寫了一個使用線程的程序,並使用 run(p, q) 方法創建了一個自定義 object 的實例。 我將此 run() 方法作為線程的目標傳遞,如下所示:
class MyClass(object):
def run(p, q):
# code here
obj = MyClass()
thrd = threading.Thread(target=obj.run, args=(a, b))
我的線程首先使用傳遞的 arguments、a 和 b 執行 run() 方法。 就我而言,其中之一是最終用於停止線程的事件。 此外,run() 方法可以訪問所有對象的實例變量,包括其他對象。
據我了解,這是有效的,因為線程與創建它的程序共享 memory。
我的問題是這與多處理有何不同。 例如
proc = multiprocessing.Process(target=obj.run, args=(a, b))
我相信一個進程不共享 memory,所以我可以這樣做嗎? 當僅引用一種方法時,該進程如何能夠訪問整個obj object? 我可以通過活動嗎? 如果創建的進程獲得了整個創建程序的 memory 的副本,那么打開數據庫連接之類的情況會怎樣? 它如何與原始事件聯系起來?
最后一個問題(感謝您對我的包容)。 是否有必要在創建的進程中復制整個程序(及其所有導入的模塊等)? 如果我想要一個不需要像主程序那么多的最小進程怎么辦?
很高興收到任何關於答案的提示,或指向以如此詳細程度描述多處理的某個地方的指針。
非常感謝。
朱利安
每個進程都有自己的 memory map。 兩個進程不共享他們的 memory 彼此。 在進程線程內部聲明在它們來自的進程的 memory 內部,它沒有。 "obj.run" 的代碼從此進程復制到新生成的進程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.