【问题标题】:PYTHON: How to receive data continuously from a server that's using zmq Poller?PYTHON:如何从使用 zmq Poller 的服务器连续接收数据?
【发布时间】:2017-08-28 07:59:51
【问题描述】:

我正在使用简单的 requests.post() 模块连接到服务器并接收数据

ack = requests.post('<ip>/get_data, data=data, timeout=10.0, verify=False)

以下是服务器中的 get_data() 方法,它使用 zmq 轮询器接收数据,直到获得最终响应。

def get_data():
    req = json.loads(self.params.get('data'))
    wire = wiring.Wire("indexing_data_pool", zmq_context=g.zmq_context)
    try:
        close_immediately = True
        poll_agent = zmq.Poller()
        poll_agent.register(wire.socket, zmq.POLLIN)
        wire.send(req)
        iteration = 1
        while True:
            socks = dict(poll_agent.poll())
            if wire.socket in socks and socks[wire.socket] == zmq.POLLIN:
                res = gevent.with_timeout(10, wire.recv, timeout_value=None)
                if res.get('final'):
                    log.warn('Last Iteration: %s, Length of Rows: %s' %(iteration, len(res['rows'])))
                    break
                else:
                    log.warn('Iteration: %s, Length of Rows: %s' %(iteration, len(res['rows'])))
                    next_req = {'search_id': req['search_id'], 'seen_version':res.get('response_version')}
                    wire.send(next_req)
                iteration +=1
    finally:
        wire.close(immediate=close_immediately)
        poll_agent.unregister(wire.socket)

在服务器端,获得的响应记录如下:

2017-08-28_07:17:55.43370 WARNING: Iteration: 1, Length of Rows: 100
2017-08-28_07:17:55.44269 WARNING: Iteration: 2, Length of Rows: 100
2017-08-28_07:17:55.44894 WARNING: Iteration: 3, Length of Rows: 100
2017-08-28_07:17:55.45742 WARNING: Iteration: 4, Length of Rows: 100
2017-08-28_07:17:55.46327 WARNING: Iteration: 5, Length of Rows: 100
2017-08-28_07:17:55.46687 WARNING: Iteration: 6, Length of Rows: 100
2017-08-28_07:17:55.47074 WARNING: Iteration: 7, Length of Rows: 100
2017-08-28_07:17:55.47658 WARNING: Iteration: 8, Length of Rows: 100
2017-08-28_07:17:55.48385 WARNING: Last Iteration: 9, Length of Rows: 75

所以,我假设我在服务器端实现的 zmq 轮询器运行良好。但是,我很想知道如何将这 9 次数据迭代发回给请求的客户端?

附:我想在客户端连续接收数据。你可以 建议在某处附加每批响应并发送 最终回复客户。当 响应太大(请求客户端会超时)

【问题讨论】:

  • 好的,我使用 Flask 模块中的 Response 对象处理了这个问题。调用一个单独的方法来连续产生数据并制作最终的 Response 对象并返回它解决了我的问题。

标签: python zeromq poller


【解决方案1】:

好的, 我使用 Flask 模块中的 Response 对象处理了这个问题。调用一个单独的方法来连续产生数据并制作最终的 Response 对象并返回它解决了我的问题。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 2020-06-20
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多