MCPcopy
hub / github.com/scrapy/scrapy / _Slot

Class _Slot

scrapy/core/engine.py:65–99  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63
64
65class _Slot:
66 def __init__(
67 self,
68 close_if_idle: bool,
69 nextcall: CallLaterOnce[None],
70 scheduler: BaseScheduler,
71 ) -> None:
72 self.closing: Deferred[None] | None = None
73 self.inprogress: set[Request] = set()
74 self.close_if_idle: bool = close_if_idle
75 self.nextcall: CallLaterOnce[None] = nextcall
76 self.scheduler: BaseScheduler = scheduler
77 self.heartbeat: AsyncioLoopingCall | LoopingCall = create_looping_call(
78 nextcall.schedule
79 )
80
81 def add_request(self, request: Request) -> None:
82 self.inprogress.add(request)
83
84 def remove_request(self, request: Request) -> None:
85 self.inprogress.remove(request)
86 self._maybe_fire_closing()
87
88 async def close(self) -> None:
89 self.closing = Deferred()
90 self._maybe_fire_closing()
91 await maybe_deferred_to_future(self.closing)
92
93 def _maybe_fire_closing(self) -> None:
94 if self.closing is not None and not self.inprogress:
95 if self.nextcall:
96 self.nextcall.cancel()
97 if self.heartbeat.running:
98 self.heartbeat.stop()
99 self.closing.callback(None)
100
101
102class ExecutionEngine:

Callers 2

open_spider_asyncMethod · 0.85

Calls

no outgoing calls

Tested by 1