forked from bmoscon/cryptofeed
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdemo_zmq.py
50 lines (36 loc) · 1.28 KB
/
demo_zmq.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
48
49
50
'''
Copyright (C) 2018-2025 Bryant Moscon - [email protected]
Please see the LICENSE file for the terms and conditions
associated with this software.
'''
from multiprocessing import Process
from yapic import json
from cryptofeed import FeedHandler
from cryptofeed.backends.zmq import BookZMQ, TickerZMQ
from cryptofeed.defines import L2_BOOK, TICKER
from cryptofeed.exchanges import Coinbase, Kraken
def receiver(port):
import zmq
addr = 'tcp://127.0.0.1:{}'.format(port)
ctx = zmq.Context.instance()
s = ctx.socket(zmq.SUB)
# empty subscription for all data, could be book for just book data, etc
s.setsockopt(zmq.SUBSCRIBE, b'')
s.bind(addr)
while True:
data = s.recv_string()
key, msg = data.split(" ", 1)
print(key)
print(json.loads(msg))
def main():
try:
p = Process(target=receiver, args=(5678,))
p.start()
f = FeedHandler()
f.add_feed(Kraken(max_depth=2, channels=[L2_BOOK], symbols=['ETH-USD', 'BTC-USD'], callbacks={L2_BOOK: BookZMQ(snapshots_only=False, snapshot_interval=2, port=5678)}))
f.add_feed(Coinbase(channels=[TICKER], symbols=['BTC-USD'], callbacks={TICKER: TickerZMQ(port=5678)}))
f.run()
finally:
p.terminate()
if __name__ == '__main__':
main()