significantly improve performance by only refreshing market values when needed
This commit is contained in:
parent
06333af0e9
commit
c55587eb57
2
Makefile
2
Makefile
|
@ -113,7 +113,7 @@ daemon:
|
|||
quiet_daemon:
|
||||
@while [ 1 ]; do\
|
||||
$(MAKE) run $(MFLAGS);\
|
||||
sleep 1800;\
|
||||
sleep 21600;\
|
||||
done;
|
||||
|
||||
.PHONY: build
|
||||
|
|
|
@ -36,7 +36,7 @@ class Market(DictDeserializable):
|
|||
"""Represent a market and its corresponding rules.
|
||||
|
||||
Events
|
||||
======
|
||||
------
|
||||
before_check(market: Market):
|
||||
after_check(market: Market):
|
||||
Called before/after a market is checked. Please don't put anything intensive in here.
|
||||
|
@ -94,7 +94,6 @@ class Market(DictDeserializable):
|
|||
"""Rebuild sensitive/non-serializable state after retrieving from database."""
|
||||
self.__dict__.update(state)
|
||||
self.client = get_client()
|
||||
self.market = self.client.get_market_by_id(self.market.id)
|
||||
if not hasattr(self, "event_emitter"):
|
||||
self.event_emitter = EventEmitter()
|
||||
self.event_emitter._lock = Lock()
|
||||
|
@ -104,6 +103,10 @@ class Market(DictDeserializable):
|
|||
def id(self) -> str:
|
||||
"""Return the ID of a market as reported by Manifold."""
|
||||
return self.market.id
|
||||
|
||||
def refresh(self) -> None:
|
||||
"""Ensure market data is recent."""
|
||||
self.market = self.client.get_market_by_id(self.market.id)
|
||||
|
||||
@property
|
||||
def status(self) -> MarketStatus:
|
||||
|
|
|
@ -26,6 +26,7 @@ class ThisMarketClosed(AbstractRule[bool]):
|
|||
_explainer_stub: ClassVar[str] = "If this market reaches its close date"
|
||||
|
||||
def _value(self, market: Market) -> bool:
|
||||
market.refresh()
|
||||
assert market.market.closeTime is not None
|
||||
return bool(market.market.closeTime < time() * 1000)
|
||||
|
||||
|
@ -37,6 +38,7 @@ class CurrentValueRule(AbstractRule[AnyResolution]):
|
|||
_explainer_stub: ClassVar[str] = "Resolves to the current market value"
|
||||
|
||||
def _value(self, market: Market) -> float | dict[Any, float]:
|
||||
market.refresh()
|
||||
if market.market.outcomeType == Outcome.BINARY:
|
||||
assert market.market.probability is not None
|
||||
return market.market.probability * 100
|
||||
|
@ -62,6 +64,7 @@ class FibonacciValueRule(Rule[Union[float, Mapping[int, float]]]):
|
|||
min_rewarded: float = 0.0001
|
||||
|
||||
def _value(self, market: Market) -> float | dict[int, float]:
|
||||
market.refresh()
|
||||
items = market_to_answer_map(market, self.exclude, (lambda id_, probability: probability < self.min_rewarded))
|
||||
rank = sorted(items, key=items.__getitem__)
|
||||
ret = {item: fib for item, fib in zip(rank, fibonacci())}
|
||||
|
@ -98,6 +101,7 @@ class PopularValueRule(Rule[Union[MultipleChoiceResolution, FreeResponseResoluti
|
|||
size: int = 1
|
||||
|
||||
def _value(self, market: Market) -> FreeResponseResolution | MultipleChoiceResolution:
|
||||
market.refresh()
|
||||
answers = market_to_answer_map(market)
|
||||
final_answers: dict[int, float] = {}
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue