/
rate.py
48 lines (39 loc) · 1.17 KB
/
rate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# coding: utf-8
import asyncio
import json
import zmq
from tornado.options import define, options
import random
import logging
define("port", default=8888, help="port to pub/sub")
define("debug", default=False, help="asyncio debug flg")
async def get_rate(rate: float):
return rate + random.uniform(-1,1)
def async_debug(loop: asyncio.AbstractEventLoop):
loop.set_debug(True)
logging.basicConfig(level=logging.DEBUG)
async def periodic_send(socket: zmq.Socket):
rate = 100.0
while True:
bid = await get_rate(rate)
ask = await get_rate(rate)
if bid > ask:
tmp = bid
bid = ask
ask = tmp
rateobj = {"ask": ask,"bid":bid}
print(rateobj)
socket.send_multipart([b"TEST",json.dumps(rateobj).encode('utf-8')])
await asyncio.sleep(1.0)
def main():
loop = asyncio.get_event_loop()
if(options.debug):
async_debug(loop)
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind("tcp://*:%s" % options.port)
loop.run_until_complete(periodic_send(socket))
loop.close()
if __name__ == '__main__':
options.parse_command_line()
main()