как передать аргумент в витой декоратор defer.inlineCallbacks? - PullRequest
0 голосов
/ 11 июля 2019

Я хочу передать URL в функцию задачи, чтобы использовать для получения разного контента сайта одновременно. Но похоже, что он не может быть завершен. Это прекратится без остатка.

    from scrapy.selector import Selector

def get_response_callback(content):
    txt = str(content,encoding='utf-8')
    resp = Selector(text=txt)
    title = resp.xpath('//title/text()').extract_first()
    print(title)

@defer.inlineCallbacks
def task(*args,**kwargs):
    # url = 'http://www.baidu.com'
    url=kwargs.get('url')
    print(url)
    d=getPage(url.encode('utf-8'))
    d.addCallback(get_response_callback)
    yield d

def done(*args,**kwargs):
    reactor.stop()

task_list = []
url_list = ['http://www.baidu.com','http://www.bing.com','http://www.qq.com']
for i in url_list:
    d=task(url=i)
    task_list.append(d)

dd = defer.DeferredList(task_list)

dd.addBoth(done) # should use done1 to avoid not stoping the function

reactor.run()

Как передать аргумент функции задачи?

...