Для существующего проекта 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
, когда он доступен и, в идеале, изолированно?
ThreadLocal
в JVM - person SkyWalker   schedule 22.02.2021contextvars
или любой другой глобальный объект может быть более подходящим. Диапазонcontextvars
- ›threading.local
-› global - это компромисс между устойчивостью параллелизма к накладным расходам. - person MisterMiyagi   schedule 22.02.2021