繁体   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