mirror of https://github.com/scrapy/scrapy.git
parent
9adb5c31c0
commit
4e2885c9bf
|
|
@ -7,6 +7,8 @@ from collections import deque
|
||||||
|
|
||||||
import six
|
import six
|
||||||
from twisted.internet import reactor, defer, task
|
from twisted.internet import reactor, defer, task
|
||||||
|
from queuelib.pqueue import PriorityQueue
|
||||||
|
from queuelib.queue import FifoMemoryQueue
|
||||||
|
|
||||||
from scrapy.utils.defer import mustbe_deferred
|
from scrapy.utils.defer import mustbe_deferred
|
||||||
from scrapy.utils.httpobj import urlparse_cached
|
from scrapy.utils.httpobj import urlparse_cached
|
||||||
|
|
@ -25,7 +27,7 @@ class Slot(object):
|
||||||
self.randomize_delay = randomize_delay
|
self.randomize_delay = randomize_delay
|
||||||
|
|
||||||
self.active = set()
|
self.active = set()
|
||||||
self.queue = deque()
|
self.queue = PriorityQueue(qfactory=lambda p: FifoMemoryQueue())
|
||||||
self.transferring = set()
|
self.transferring = set()
|
||||||
self.lastseen = 0
|
self.lastseen = 0
|
||||||
self.latercall = None
|
self.latercall = None
|
||||||
|
|
@ -130,7 +132,7 @@ class Downloader(object):
|
||||||
|
|
||||||
slot.active.add(request)
|
slot.active.add(request)
|
||||||
deferred = defer.Deferred().addBoth(_deactivate)
|
deferred = defer.Deferred().addBoth(_deactivate)
|
||||||
slot.queue.append((request, deferred))
|
slot.queue.push((request, deferred), priority=-request.priority)
|
||||||
self._process_queue(spider, slot)
|
self._process_queue(spider, slot)
|
||||||
return deferred
|
return deferred
|
||||||
|
|
||||||
|
|
@ -150,7 +152,7 @@ class Downloader(object):
|
||||||
# Process enqueued requests if there are free slots to transfer for this slot
|
# Process enqueued requests if there are free slots to transfer for this slot
|
||||||
while slot.queue and slot.free_transfer_slots() > 0:
|
while slot.queue and slot.free_transfer_slots() > 0:
|
||||||
slot.lastseen = now
|
slot.lastseen = now
|
||||||
request, deferred = slot.queue.popleft()
|
request, deferred = slot.queue.pop()
|
||||||
dfd = self._download(slot, request, spider)
|
dfd = self._download(slot, request, spider)
|
||||||
dfd.chainDeferred(deferred)
|
dfd.chainDeferred(deferred)
|
||||||
# prevent burst if inter-request delays were configured
|
# prevent burst if inter-request delays were configured
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue