2013-09-30 104 views
0

该方法有什么问题? “流”是我宣布的用于启动流式传输的方法名称,它起作用。但是,当我写这种方法断开拖缆时,它有错误说'str'对象没有属性'disconnect'。任何人都可以给我举例或告诉我我错过了什么?'str'对象没有属性'disconnect'

def twitter_stop(request): 
    stream = request.session['stream'] 

    stream.disconnect() 
    return HttpResponse(request) 

更新: 这是我的启动方法,其是工作:

def twitter_start(request): 
    stream = MyStreamer(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, 
       settings.ACCESS_TOKEN_KEY, settings.ACCESS_TOKEN_SECRET) 
    # get the stream object from the SESSION 
     request.session['stream'] = stream 
    # get the keywords from the models 
     keywords = Keys.objects.all() 
     stream.statuses.filter(track=keywords) 
     return HttpResponse(request) 
+0

你将需要给予更多的情况下,你是如何设置'的request.session [“流”]'。因为它看起来'stream'是一个字符串,而不是你认为的那样。 –

+0

@Shurane你的意思是什么? Anyw,我已经更新了使用流的启动方法..可以引导我一起吗? –

+0

看起来像一个反序列化问题。你需要将它存储在会话中吗?如果是这样,你可以尝试手动序列化和反序列化。 – Rolando

回答

-1

的2个请求对象是不同的;您分配的流twitter_start in request.session在执行该函数后丢失。使用全局变量 存储流,例如:

global STREAM 

def twitter_start(request): 
    global STREAM 
    STREAM = MyStreamer(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, 
         settings.ACCESS_TOKEN_KEY, settings.ACCESS_TOKEN_SECRET) 

    # get the keywords from the models 
    keywords = Keys.objects.all() 
    STREAM.statuses.filter(track=keywords) 
    return HttpResponse(request) 

def twitter_stop(request): 
    STREAM.disconnect() 
    return HttpResponse(request) 
+0

2个请求对象确实不同,但你应该阅读'请求'。会话“是 - 是的,从一个请求存储的东西到另一个。出于非常明显的原因,在可能的多线程和/或多进程执行上下文中使用全局是错误的解决方案。长话短说:这是关于最糟糕的答案: -/ –

+0

@brunodesthuilliers:你完全正确!对不起,我回答了太快,我想... – mguijarr

相关问题