From b19ff21acd4f93f0fa6cc3c53b81987ce1a7f8c7 Mon Sep 17 00:00:00 2001 From: Pablo Hoffman Date: Fri, 10 Dec 2010 15:55:40 -0200 Subject: [PATCH] scrapyd: added support for deferred spider queues --- scrapyd/poller.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scrapyd/poller.py b/scrapyd/poller.py index e828617be..2e8c18fbc 100644 --- a/scrapyd/poller.py +++ b/scrapyd/poller.py @@ -1,5 +1,5 @@ from zope.interface import implements -from twisted.internet.defer import DeferredQueue +from twisted.internet.defer import DeferredQueue, inlineCallbacks, maybeDeferred, returnValue from .utils import get_spider_queues from .interfaces import IPoller @@ -13,13 +13,15 @@ class QueuePoller(object): self.update_projects() self.dq = DeferredQueue(size=1) + @inlineCallbacks def poll(self): if self.dq.pending: return for p, q in self.queues.iteritems(): - if q.count(): - msg = q.pop() - return self.dq.put(self._message(msg, p)) + c = yield maybeDeferred(q.count) + if c: + msg = yield maybeDeferred(q.pop) + returnValue(self.dq.put(self._message(msg, p))) def next(self): return self.dq.get()