Есть ли положение Pythonic, как в Scala? т.е. для подсчета FLOP

Для существующего проекта Python мне нужно представить сквозную нефункциональную проблему подсчета FLOP, чтобы я мог вычислить производительность в GFlop в секунду для этого приложения.

В Scala я мог бы решить эту проблему с помощью неявного параметра, например. flopTracker и сделать его доступным везде, где это необходимо, flopTracker.count(N) прибавляя к общей сумме. Потом в конце программы делаем flopTracker.getTotalCount().

В Python я мог бы использовать диспетчер контекста, например:

with FlopTracker as flop_tracker:
    # call other modules having flop_tracker accessible ...
    # ...
    logger.info(f"my total flop count is {flop_tracker.get_total_count()}")

Как это сделать с помощью Pythonic? как сделать так, чтобы какой-либо модуль видел это flop_tracker, когда он доступен и, в идеале, изолированно?


person SkyWalker    schedule 22.02.2021    source источник
comment
Отвечает ли это на ваш вопрос? Свободное позднее связывание против строгого позднего связывания   -  person MisterMiyagi    schedule 22.02.2021
comment
@MisterMiyagi большое спасибо! выглядит многообещающе :) мне кажется, что область видимости ThreadLocal в JVM   -  person SkyWalker    schedule 22.02.2021
comment
Обратите внимание, что в зависимости от того, что вы хотите сделать, contextvars или любой другой глобальный объект может быть более подходящим. Диапазон contextvars - ›threading.local -› global - это компромисс между устойчивостью параллелизма к накладным расходам.   -  person MisterMiyagi    schedule 22.02.2021
comment
Похоже, вы ищете внедрение зависимостей в Python. stackoverflow.com/ questions / 2461702 / python-dependency-injector.ets- labs.org/introduction/   -  person Kolmar    schedule 22.02.2021