7
7
import logging
8
8
from time import time
9
9
10
- from twisted .internet import defer
10
+ from twisted .internet import defer , task
11
11
from twisted .python .failure import Failure
12
12
13
13
from scrapy import signals
@@ -30,6 +30,7 @@ def __init__(self, start_requests, close_if_idle, nextcall, scheduler):
30
30
self .close_if_idle = close_if_idle
31
31
self .nextcall = nextcall
32
32
self .scheduler = scheduler
33
+ self .heartbeat = task .LoopingCall (nextcall .schedule )
33
34
34
35
def add_request (self , request ):
35
36
self .inprogress .add (request )
@@ -47,6 +48,7 @@ def _maybe_fire_closing(self):
47
48
if self .closing and not self .inprogress :
48
49
if self .nextcall :
49
50
self .nextcall .cancel ()
51
+ self .heartbeat .stop ()
50
52
self .closing .callback (None )
51
53
52
54
@@ -98,7 +100,6 @@ def _next_request(self, spider):
98
100
return
99
101
100
102
if self .paused :
101
- slot .nextcall .schedule (5 )
102
103
return
103
104
104
105
while not self ._needs_backout (spider ):
@@ -239,6 +240,7 @@ def open_spider(self, spider, start_requests=(), close_if_idle=True):
239
240
self .crawler .stats .open_spider (spider )
240
241
yield self .signals .send_catch_log_deferred (signals .spider_opened , spider = spider )
241
242
slot .nextcall .schedule ()
243
+ slot .heartbeat .start (5 )
242
244
243
245
def _spider_idle (self , spider ):
244
246
"""Called when a spider gets idle. This function is called when there
@@ -252,7 +254,6 @@ def _spider_idle(self, spider):
252
254
spider = spider , dont_log = DontCloseSpider )
253
255
if any (isinstance (x , Failure ) and isinstance (x .value , DontCloseSpider ) \
254
256
for _ , x in res ):
255
- self .slot .nextcall .schedule (5 )
256
257
return
257
258
258
259
if self .spider_is_idle (spider ):
0 commit comments