使用response.iter_lines()

时间:2015-08-28 13:28:47

标签: python stream iterator

我有一个费率流,我需要存储和比较最后两行。例如,如果新价格高于之前的队列事件。我的理解是iter_lines()只显示最后一行。我的问题是如何存储最后一行,等待新行并进行比较,然后对事件进行排队?我知道这很简单,但我仍然遇到麻烦,谢谢你的帮助!

这是我的UPDATED(3)流:

def stream_to_queue(self):
    response = self.connect_to_stream()
    if response.status_code != 200:
        return
    oldLine = ''    
    for line in response.iter_lines(1):

        if line < oldLine:
            try:
                msg = json.loads(line)
            except Exception as e:
                print "Caught exception when converting message into json\n" + str(e)
                return
            if msg.has_key("instrument") or msg.has_key("tick"):
                print msg["tick"]
                instrument = msg["tick"]["instrument"]
                time = msg["tick"]["time"]
                bid = msg["tick"]["bid"]
                ask = msg["tick"]["ask"]
                stop = msg["tick"]["ask"]
                tev = TickEvent(instrument, time, bid, ask)
                self.events_queue.put(tev)
        oldLine = line

1 个答案:

答案 0 :(得分:0)

原始功能:

def stream_to_queue(self):
    response = self.connect_to_stream()
    if response.status_code != 200:
        return
    for line in response.iter_lines(1):
        if line:
            try:
                msg = json.loads(line)
            except Exception as e:
                print "Caught exception when converting message into json\n" + str(e)
                return
            if msg.has_key("instrument") or msg.has_key("tick"):
                print msg["tick"]
                instrument = msg["tick"]["instrument"]
                time = msg["tick"]["time"]
                bid = msg["tick"]["bid"]
                ask = msg["tick"]["ask"]
                stop = msg["tick"]["ask"]

修复后的功能:

def stream_to_queue(self):
    response = self.connect_to_stream()
    if response.status_code != 200:
        return
    last_msg = None   # new line
    for line in response.iter_lines(1):
        if line:
            try:
                msg = json.loads(line)
                if last_msg is None:   # new line
                    last_msg = msg     # new line
            except Exception as e:
                print "Caught exception when converting message into json\n" + str(e)
                return
            # can now compare last msg with current msg
            if msg.has_key("instrument") or msg.has_key("tick"):
                print msg["tick"]
                instrument = msg["tick"]["instrument"]
                time = msg["tick"]["time"]
                bid = msg["tick"]["bid"]
                ask = msg["tick"]["ask"]
                stop = msg["tick"]["ask"]
            last_msg = msg   # new line (may want to indent 4 more spaces)

如果您希望if last_msg is None拥有某些信息,可以将if msg.has_key支票移至last_msg阻止内部。