Синхронизация для применения декораторов - PullRequest
0 голосов
/ 02 декабря 2018

Допустим, у нас есть следующий класс с методом class decorator, который заполняет некоторый список атрибутов класса.Это может быть связано с тем, что я хочу накапливать что-то, созданное несколькими декорированными функциями.

class Foo:
   decorate_func_names = []

   @classmethod
   def decorate(cls, func):
       cls.decorated_func_names.append(func.__name__)
       return func

Теперь для стековых декораторов имеет смысл запускать их в режиме блокировки

@A.decorate
@A.decorate
def myfunc():
   pass

иЯ предполагаю, что это одни и те же две функции в одном и том же модуле.

Но что, если у меня две функции в двух разных модулях?

moduleA.py:
   @A.decorate
   def myfuncA():
      pass
moduleB.py:
   @A.decorate
   def myfuncB():
      pass

Анализирует ли когда-либо анализатор python два модуля, которые могутбыть проанализирован отдельно параллельно (или даже просто одновременно) так, чтобы это не было синхронизированной / детерминированной операцией, или GIL защищает это (хотя только в параллельном случае я предполагаю, что это не будет)?Я не знаю, является ли это допустимым для переводчиков.Хотя я знаю, что это делают компиляторы.

...