Total Complexity | 7 |
Total Lines | 58 |
Duplicated Lines | 0 % |
Coverage | 92.86% |
Changes | 0 |
1 | 1 | import sys |
|
2 | 1 | from threading import Thread |
|
3 | 1 | from rsudp import printM, printW, printE |
|
4 | 1 | from rsudp.test import TEST |
|
5 | |||
6 | |||
7 | 1 | class Consumer(Thread): |
|
8 | """ |
||
9 | The main consumer process. This consumer reads |
||
10 | queue messages from the :class:`rsudp.p_producer.Producer` |
||
11 | and distributes those messages to each sub-consumer in ``destinations``. |
||
12 | |||
13 | :param queue.Queue queue: queue of data and messages sent by :class:`rsudp.p_producer.Producer` |
||
14 | :param list destinations: list of :py:class:`queue.Queue` objects to pass data to |
||
15 | """ |
||
16 | |||
17 | |||
18 | 1 | def __init__(self, queue, destinations, testing=False): |
|
19 | """ |
||
20 | Initializes the main consumer. |
||
21 | |||
22 | """ |
||
23 | 1 | super().__init__() |
|
24 | |||
25 | 1 | self.sender = 'Consumer' |
|
26 | 1 | self.queue = queue |
|
27 | 1 | self.destinations = destinations |
|
28 | 1 | self.running = True |
|
29 | 1 | self.testing = testing |
|
30 | |||
31 | 1 | printM('Starting.', self.sender) |
|
32 | |||
33 | 1 | def run(self): |
|
34 | """ |
||
35 | Distributes queue objects to execute various other tasks: for example, |
||
36 | it may be used to populate ObsPy streams for various things like |
||
37 | plotting, alert triggers, and ground motion calculation. |
||
38 | """ |
||
39 | 1 | try: |
|
40 | 1 | while self.running: |
|
41 | 1 | p = self.queue.get() |
|
42 | 1 | self.queue.task_done() |
|
43 | |||
44 | 1 | for q in self.destinations: |
|
45 | 1 | q.put(p) |
|
46 | |||
47 | 1 | if 'TERM' in str(p): |
|
48 | 1 | printM('Exiting.', self.sender) |
|
49 | 1 | break |
|
50 | |||
51 | 1 | if self.testing: |
|
52 | 1 | TEST['x_masterqueue'][1] = True |
|
53 | |||
54 | except Exception as e: |
||
55 | return e |
||
56 | |||
57 | sys.exit() |
||
58 |