簡體   English   中英

了解 Python 中多處理和線程之間的關鍵區別

[英]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.

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