๐Ÿ“ฆ samueltardieu / zmq-broker

๐Ÿ“„ testworker.py ยท 40 lines
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#! /usr/bin/python
#

import random, worker

class TestWorker(worker.Worker):

    class Dropped(Exception):
        pass

    def __init__(self, context, requests_addr, replies_addr, drop_rate):
        super(TestWorker, self).__init__(context, requests_addr, replies_addr)
        self.drop_rate = drop_rate

    def process(self, data):
        print("Received request %s" % data)
        if random.random() < self.drop_rate:
            print("  Dropping it")
            raise TestWorker.Dropped()
        else:
            print("  Answering it")
            return b"-" + data

    def run(self):
        while True:
            try:
                print("Asking for a request")
                self.request_and_process_task()
            except TestWorker.Dropped:
                pass

if __name__ == '__main__':
    import optparse, sys
    parser = optparse.OptionParser()
    parser.usage = "%prog [options] workersAddr answersAddr dropRate"
    (option, args) = parser.parse_args()
    if len(args) != 3:
        parser.error("incorrect number of arguments")
    TestWorker(None, args[0], args[1], float(args[2])).run()