2013-09-30 40 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

相關問題