Skip to content

Commit 0863031

Browse files
committed
[EN-1791] batch of events
1 parent 944d007 commit 0863031

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

dxfeed/core/listeners/listener.pyx

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from dxfeed.core.utils.helpers cimport *
22
from dxfeed.core.utils.handler cimport EventHandler
33
from collections import namedtuple
4+
cimport cython
45

56
cdef class FuncWrapper:
67
def __cinit__(self):
@@ -18,31 +19,35 @@ TRADE_COLUMNS = ['Symbol', 'Sequence', 'Price', 'ExchangeCode', 'Size', 'Tick',
1819
TradeTuple = namedtuple('Trade', ['symbol', 'sequence', 'price', 'exchange_code', 'size', 'tick', 'change',
1920
'day_volume', 'day_turnover', 'direction', 'time', 'time_nanos', 'raw_flags',
2021
'is_eth', 'scope'])
22+
@cython.boundscheck(False)
23+
@cython.wraparound(False)
2124
cdef void trade_default_listener(int event_type,
2225
dxf_const_string_t symbol_name,
2326
const dxf_event_data_t*data,
2427
int data_count, void*user_data) nogil:
2528
cdef dxf_trade_t* trades = <dxf_trade_t*> data
29+
2630
with gil:
2731
py_data = <EventHandler> user_data
28-
32+
events = [None] * data_count
2933
for i in range(data_count):
30-
trade_event = TradeTuple(symbol=unicode_from_dxf_const_string_t(symbol_name),
31-
sequence=trades[i].sequence,
32-
price=trades[i].price,
33-
exchange_code=unicode_from_dxf_const_string_t(&trades[i].exchange_code),
34-
size=trades[i].size,
35-
tick=trades[i].tick,
36-
change=trades[i].change,
37-
day_volume=trades[i].day_volume,
38-
day_turnover=trades[i].day_turnover,
39-
direction=trades[i].direction,
40-
time=trades[i].time,
41-
time_nanos=trades[i].time_nanos,
42-
raw_flags=trades[i].raw_flags,
43-
is_eth=trades[i].is_eth,
44-
scope=trades[i].scope)
45-
py_data.cython_internal_update_method(trade_event)
34+
events[i] = TradeTuple(symbol=unicode_from_dxf_const_string_t(symbol_name),
35+
sequence=trades[i].sequence,
36+
price=trades[i].price,
37+
exchange_code=unicode_from_dxf_const_string_t(&trades[i].exchange_code),
38+
size=trades[i].size,
39+
tick=trades[i].tick,
40+
change=trades[i].change,
41+
day_volume=trades[i].day_volume,
42+
day_turnover=trades[i].day_turnover,
43+
direction=trades[i].direction,
44+
time=trades[i].time,
45+
time_nanos=trades[i].time_nanos,
46+
raw_flags=trades[i].raw_flags,
47+
is_eth=trades[i].is_eth,
48+
scope=trades[i].scope)
49+
50+
py_data.cython_internal_update_method(events)
4651

4752
QUOTE_COLUMNS = ['Symbol', 'Sequence', 'Time', 'Nanos', 'BidTime', 'BidExchangeCode', 'BidPrice', 'BidSize', 'AskTime',
4853
'AskExchangeCode', 'AskPrice', 'AskSize', 'Scope']

0 commit comments

Comments
 (0)