Python:“猴子修补”类时的python进程隔离级别

时间:2013-04-15 14:32:28

标签: python process pyramid wsgi monkeypatching

我有一个(初学者)问题。

我打算运行多个webapp(金字塔网络应用程序),我有一个公共库(让我们称之为基础应用程序),可以被两个webapps使用,包括金字塔配置包括等等。这些webapps最终将是单独的wsgi脚本(可能)最终坐在同一个virtualenv。

我的问题是:如果我在这个库中修补补丁类,那么python中的隔离级别是什么(我目前正在动态地改变该库中可能从两个引用的某些类的基础 web应用)。

例如:

基础应用程序中的

class_from_baseapp(grandparent):
    pass

在派生应用2中:

from baseapp import class_from_baseapp
#do some stuff with this class
#and have another bunch of child classes too!
class_from_childapp2(class_from_baseapp):
    pass
派生应用1中的

from baseapp import class_from_baseapp
# then what I do is I change this dynamically to
# class_from_baseapp(grandparent, mixin_class): 
# by altering the class' __bases__


class_from_childapp1(class_from_baseapp):
    pass

所以再一次,我的问题是:如果它导入/使用与上面相同的类,这个猴子补丁会泄漏到其他Web应用程序(Web应用程序1)吗?我不知道python解释器中的进程和线程隔离是如何工作的。

1 个答案:

答案 0 :(得分:1)

如果您正在运行单独的进程,则进程之间的隔离已完成。每个Python解释器都有自己对类的引用。猴子修补内存中的模块不会影响任何进程,但会影响修补过程。

在同一个Python进程中运行的线程都使用相同的类。根据补丁的完成方式(以及线程在修补之前获得的引用),所有线程都可能看不到补丁,但通常会看到。