本文整理汇总了Python中twitter.common.collections.OrderedDict.get方法的典型用法代码示例。如果您正苦于以下问题:Python OrderedDict.get方法的具体用法?Python OrderedDict.get怎么用?Python OrderedDict.get使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类twitter.common.collections.OrderedDict
的用法示例。
在下文中一共展示了OrderedDict.get方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: BuildGraph
# 需要导入模块: from twitter.common.collections import OrderedDict [as 别名]
# 或者: from twitter.common.collections.OrderedDict import get [as 别名]
class BuildGraph(object):
"""A directed acyclic graph of Targets and dependencies. Not necessarily connected.
"""
class DuplicateAddressError(AddressLookupError):
"""The same address appears multiple times in a dependency list"""
class TransitiveLookupError(AddressLookupError):
"""Used to append the current node to the error message from an AddressLookupError """
def __init__(self, address_mapper, run_tracker=None):
self._address_mapper = address_mapper
self.run_tracker = run_tracker
self.reset()
def reset(self):
"""Clear out the state of the BuildGraph, in particular Target mappings and dependencies."""
self._addresses_already_closed = set()
self._target_by_address = OrderedDict()
self._target_dependencies_by_address = defaultdict(OrderedSet)
self._target_dependees_by_address = defaultdict(set)
self._derived_from_by_derivative_address = {}
def contains_address(self, address):
return address in self._target_by_address
def get_target_from_spec(self, spec, relative_to=''):
"""Converts `spec` into a SyntheticAddress and returns the result of `get_target`"""
return self.get_target(SyntheticAddress.parse(spec, relative_to=relative_to))
def get_target(self, address):
"""Returns the Target at `address` if it has been injected into the BuildGraph, otherwise None.
"""
return self._target_by_address.get(address, None)
def dependencies_of(self, address):
"""Returns the dependencies of the Target at `address`.
This method asserts that the address given is actually in the BuildGraph.
"""
assert address in self._target_by_address, (
'Cannot retrieve dependencies of {address} because it is not in the BuildGraph.'
.format(address=address)
)
return self._target_dependencies_by_address[address]
def dependents_of(self, address):
"""Returns the Targets which depend on the target at `address`.
This method asserts that the address given is actually in the BuildGraph.
"""
assert address in self._target_by_address, (
'Cannot retrieve dependents of {address} because it is not in the BuildGraph.'
.format(address=address)
)
return self._target_dependees_by_address[address]
def get_derived_from(self, address):
"""Get the target the specified target was derived from.
If a Target was injected programmatically, e.g. from codegen, this allows us to trace its
ancestry. If a Target is not derived, default to returning itself.
"""
parent_address = self._derived_from_by_derivative_address.get(address, address)
return self.get_target(parent_address)
def get_concrete_derived_from(self, address):
"""Get the concrete target the specified target was (directly or indirectly) derived from.
The returned target is guaranteed to not have been derived from any other target.
"""
current_address = address
next_address = self._derived_from_by_derivative_address.get(current_address, current_address)
while next_address != current_address:
current_address = next_address
next_address = self._derived_from_by_derivative_address.get(current_address, current_address)
return self.get_target(current_address)
def inject_target(self, target, dependencies=None, derived_from=None):
"""Injects a fully realized Target into the BuildGraph.
:param Target target: The Target to inject.
:param list<Address> dependencies: The Target addresses that `target` depends on.
:param Target derived_from: The Target that `target` was derived from, usually as a result
of codegen.
"""
dependencies = dependencies or frozenset()
address = target.address
if address in self._target_by_address:
raise ValueError('A Target {existing_target} already exists in the BuildGraph at address'
' {address}. Failed to insert {target}.'
.format(existing_target=self._target_by_address[address],
address=address,
target=target))
if derived_from:
if not self.contains_address(derived_from.address):
raise ValueError('Attempted to inject synthetic {target} derived from {derived_from}'
#.........这里部分代码省略.........
示例2: PerPathDatapoints
# 需要导入模块: from twitter.common.collections import OrderedDict [as 别名]
# 或者: from twitter.common.collections.OrderedDict import get [as 别名]
class PerPathDatapoints(Thread):
PURGE_SLEEP_TIME = 2 # sleep time between purging old datapoints
DEFAULT_TOP_RESULTS = 10 # number of (top) results to show by default
def __init__(self, older_than=120, aggregation_depth=0):
"""
datapoints that are `older_than` will be dropped
if aggregation_depth > 0 then we aggregate for paths up to that depth
"""
self._older_than = older_than
self._aggregation_depth = aggregation_depth
self._requests_by_timestamp = OrderedDict()
self._lock = Lock()
super(PerPathDatapoints, self).__init__()
def size(self):
size = {"samples": 0, "requests_mem_usage": 0}
with self._lock:
samples, mem_usage = 0, 0
for reqs in self._requests_by_timestamp.values():
samples += len(reqs)
mem_usage += sum(sys.getsizeof(r) for r in reqs)
size["samples"] = samples
size["requests_mem_usage"] = mem_usage
size["requests_mem_usage"] = sizeof_fmt(size["requests_mem_usage"])
size["ordered_dict_mem_usage"] = sizeof_fmt(sys.getsizeof(self._requests_by_timestamp))
return size
def run(self):
""" drop samples that are too old """
while True:
time.sleep(self.PURGE_SLEEP_TIME)
old_tstamp = time.time() - self._older_than
with self._lock:
for tstamp in self._requests_by_timestamp.keys():
if tstamp < old_tstamp:
del self._requests_by_timestamp[tstamp]
def handle_request(self, request):
if self._aggregation_depth > 0:
request.path = intern(request.parent_path(self._aggregation_depth))
with self._lock:
tstamp = int(time.time())
if tstamp not in self._requests_by_timestamp:
self._requests_by_timestamp[tstamp] = []
self._requests_by_timestamp[tstamp].append(request)
def sum_minute(self, top=DEFAULT_TOP_RESULTS, order_by=Counters.WRITES,
display=[Counters.ALL], view=AccumulatedStats.VIEW_BY_PATH):
now = int(time.time())
old = now - NUMBER_OF_DATAPOINTS
stats = AccumulatedStats(StatsConfig())
with self._lock:
# note that this is an OrderedDict so samples are in chronological order
for tstamp in self._requests_by_timestamp.keys():
if tstamp < old:
continue
if tstamp > now:
break
for r in self._requests_by_timestamp[tstamp]:
stats.handle_request(r)
return stats.dict(top=top,
order_by=order_by,
display_filters=display,
view=view)
def datapoints_writes(self):
return self._filter_datapoints(condition=lambda req: req.is_write)
def datapoints_reads(self):
return self._filter_datapoints(condition=lambda req: not req.is_write)
def datapoints_for_op(self, op):
return self._filter_datapoints(condition=lambda req: req.opcode == op)
def datapoints_by_path_for_op(self, op, top):
""" op is "writes" or "reads" or one of OpCodes.CREATE, OpCodes.SETDATA, etc.
because why use Python if you can't abuse types?
top is the number of results
"""
if op == "writes":
return self._datapoints_by_path_for_op_impl(lambda r: r.is_write, top)
elif op == "reads":
return self._datapoints_by_path_for_op_impl(lambda r: not r.is_write, top)
else:
return self._datapoints_by_path_for_op_impl(lambda r: r.opcode == op, top)
def _datapoints_by_path_for_op_impl(self, request_filter, top):
""" to make this moderately efficient we use a dict that
provides a pre-populated list of datapoints.
"""
tstamp = int(time.time()) - NUMBER_OF_DATAPOINTS
#.........这里部分代码省略.........