【问题标题】:Python: python process isolation level when "monkey patching" classesPython:“猴子补丁”类时的python进程隔离级别
【发布时间】:2013-04-07 17:22:36
【问题描述】:

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

我打算运行多个 web 应用程序(金字塔网络应用程序),并且我有一个公共库(我们称之为基础应用程序),两个 web 应用程序都可以使用它并且包括金字塔配置包括等。这些 web 应用程序最终将是单独的 wsgi脚本(可能)最终位于同一个 virtualenv 中。

我的问题是:如果我在这个库中猴子补丁类,python 中的隔离级别是什么(我目前正在动态更改该库中可能同时引用的某些类的 bases网络应用程序)。

例如:

在基础应用中:

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解释器中的进程和线程隔离是如何工作的。

【问题讨论】:

    标签: python process pyramid wsgi monkeypatching


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2012-12-18
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      • 2012-12-12
      • 2015-09-03
      相关资源
      最近更新 更多