1
1
# coding: utf-8
2
2
import logging
3
- import time
3
+ from datetime import timedelta
4
4
from enum import Enum
5
+ from time import sleep
5
6
6
7
import rx
7
8
from rx import operators as ops , Observable
@@ -24,8 +25,8 @@ class WriteType(Enum):
24
25
25
26
class WriteOptions (object ):
26
27
27
- def __init__ (self , write_type = WriteType .batching , batch_size = 1_000 , flush_interval = None , jitter_interval = None ,
28
- retry_interval = None , buffer_limit = None , write_scheduler = None ) -> None :
28
+ def __init__ (self , write_type = WriteType .batching , batch_size = 1_000 , flush_interval = 1_000 , jitter_interval = None ,
29
+ retry_interval = None , buffer_limit = None , write_scheduler = NewThreadScheduler () ) -> None :
29
30
self .write_type = write_type
30
31
self .batch_size = batch_size
31
32
self .flush_interval = flush_interval
@@ -118,9 +119,10 @@ def __init__(self, service, write_options=WriteOptions()) -> None:
118
119
if self ._write_options .write_type is WriteType .batching :
119
120
self ._subject = Subject ()
120
121
121
- observable = self ._subject .pipe (ops .observe_on (NewThreadScheduler () ))
122
+ observable = self ._subject .pipe (ops .observe_on (self . _write_options . write_scheduler ))
122
123
self ._disposable = observable \
123
- .pipe (ops .window_with_count (write_options .batch_size ),
124
+ .pipe (ops .window_with_time_or_count (count = write_options .batch_size ,
125
+ timespan = timedelta (milliseconds = write_options .flush_interval )),
124
126
ops .flat_map (lambda v : _window_to_group (v )),
125
127
ops .map (mapper = lambda x : self ._retryable (x )),
126
128
ops .merge_all ()) \
@@ -172,7 +174,7 @@ def __del__(self):
172
174
self ._subject .dispose ()
173
175
self ._subject = None
174
176
# TODO remove sleep
175
- time . sleep (2 )
177
+ sleep (2 )
176
178
if self ._disposable :
177
179
self ._disposable .dispose ()
178
180
self ._disposable = None
0 commit comments