0

极端新手,提前道歉,我不知道我在做什么 - 但我真的环顾四周。

我正在下载登录表单后面的几十页并在 GAE 上运行结果。我想将任务队列中的每个页面读取和数据库写入排入队列。当我切换到任务队列时,我意识到我在传递会话时遇到了问题。

我使用 urllib2 创建了一个开瓶器:

    cj = cookielib.CookieJar()
    session = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    session.addheaders.append(('User-agent', 'Mozilla/4.0'))  
    login_data = urllib.urlencode({ 'username' : 'guest',
                                    'password' : 'guest',
                                    'Submit1'  : 'Submit'})  
    resp = session.open(self.login_page, login_data, timeout=20) 
    self.session = session

以前我只在事物的前端实例化这个类一次,创建一个会话实例变量供所有人使用,然后传递我的实例以保持上下文。使用任务队列我不能传递对象,所以当我的请求处理程序被调用时,我不能给他对开启器或 cookie 的引用。

有没有办法存储或传递开瓶器或 cookie 信息,这样我就可以构建一个新的开瓶器而无需每次重新登录?我可以通过 headers 字典将 cookie 信息传递给每个处理程序吗?在内存缓存中填充一些东西?我到底需要传递什么才能将 cookie 重新放入有效的开瓶器中?

非常感谢所有参与上述内容的人。

4

1 回答 1

1

您可以通过延迟库而不是任务队列传递对象。

但出于可靠性原因,我建议您将对象存储在数据存储中,并且只在任务队列中传递引用。

于 2012-04-24T17:04:31.577 回答