示例#1
0
    def start(self):
        """register dispatchers for streams"""
        self.io_loop = ioloop.IOLoop.current()
        self.msg_queue = PriorityQueue()
        self.io_loop.add_callback(self.dispatch_queue)

        if self.control_stream:
            self.control_stream.on_recv(
                partial(
                    self.schedule_dispatch,
                    CONTROL_PRIORITY,
                    self.dispatch_control,
                ),
                copy=False,
            )

        for s in self.shell_streams:
            if s is self.control_stream:
                continue
            s.on_recv(
                partial(
                    self.schedule_dispatch,
                    SHELL_PRIORITY,
                    self.dispatch_shell,
                    s,
                ),
                copy=False,
            )

        # publish idle status
        self._publish_status('starting')
示例#2
0
 def __init__(self, name="QUEUE"):
     super(SRQueue, self).__init__()
     self.name = name
     self.queue = PriorityQueue()
     self._result_queue = Queue()
     self.processing = []
     self.min_priority = SRQueuePriorities.EXTREME
     self.amActive = False
     self.stop = False
示例#3
0
 def __init__(self, stream, address, server=None):
     self.stream = stream
     self.address = address
     self.is_authed = False
     self.last_message = None
     self.server = server
     self.id = hash(datetime.now())
     self._queue = PriorityQueue()
     self._queue.join()
     logger.debug('Worker for {} is initiated'.format(address))
示例#4
0
 def __init__(self, name="QUEUE"):
     super(SRQueue, self).__init__()
     self.name = name
     self.scheduler = TornadoScheduler({'apscheduler.timezone': 'UTC'})
     self.queue = PriorityQueue()
     self._result_queue = Queue()
     self._queue_items = []
     self.processing = []
     self.min_priority = SRQueuePriorities.EXTREME
     self.amActive = False
     self.stop = False
示例#5
0
        def __init__(self):
            scheduler = IOLoopScheduler(IOLoop.current())
            self._define_app_handlers()
            self.orders = PriorityQueue()

            self.posted_orders = []

            self.fulfilled_orders = []

            self.messages = Subject()

            self.only_messages = self.messages \
                .filter(lambda msg: msg[0] == 'message') \
                .map(lambda msg: msg[1].split(',')) \
                .publish()

            def queue_order(msg):
                print('queueing order: {}'.format(msg))
                self.orders.put(Order.from_list(msg))

            self.only_messages \
                .filter(lambda msg: msg[0] == 'order') \
                .map(lambda msg: msg[1:]) \
                .subscribe(queue_order)
            self.only_messages.connect()

            def process_order(time):
                try:
                    order = self.orders.get_nowait()
                    print('processing order: {} [{}]'.format(
                        order, order.timestamp))
                    matching = None
                    for posted in self.posted_orders:
                        if posted.matches(order):
                            matching = posted
                            break

                    if matching is None:
                        self.posted_orders.append(order)
                        print('could not find match, posted order count is {}'.
                              format(len(self.posted_orders)))
                    else:
                        self.posted_orders.remove(posted)
                        self.fulfilled_orders.append(posted)
                        self.fulfilled_orders.append(order)
                        print('order fulfilled: {}'.format(order))
                        print('fulfilled by: {}'.format(posted))
                except QueueEmpty:
                    pass

            Observable.interval(100,
                                scheduler=scheduler).subscribe(process_order)
示例#6
0
 def __init__(self, name=None, max_count=10, dt=0.5, client_set=None):
     global clients_set
     self.name = name or hash(datetime.now())
     self.max_count = max_count
     self.dt = dt
     self.authorized = False
     self.count = 0
     if client_set is None:
         self.client_set = set()
         self.client_set.add(self)
     else:
         self.client_set = client_set
     self._event_queue = PriorityQueue()
     self._event_queue.join()
     logger.debug('client start {}'.format(self.name))
     IOLoop.current().spawn_callback(self.init)
     IOLoop.current().spawn_callback(self.start_produce)
from tornado.queues import PriorityQueue

q = PriorityQueue()
q.put((1, 'medium-priority item'))
q.put((0, 'high-priority item'))
q.put((10, 'low-priority item'))

print(q.get_nowait())
print(q.get_nowait())
print(q.get_nowait())
示例#8
0
import os
from concurrent.futures import ThreadPoolExecutor

from tornado.queues import PriorityQueue, QueueEmpty
from tornado.gen import sleep, coroutine
from tokit import Event, on, logger
from inspect import iscoroutinefunction
from email.mime.text import MIMEText
import smtplib
from email.header import Header
from tornado.gen import coroutine
from tornado.concurrent import run_on_executor

tasks_queue = PriorityQueue()


def put(name, *args, priority=0, **kwargs):
    """
    Schedule a task with given params

    Handlers of event with same name will be used when execute task

    Example::

        @on('task_xyz')
        def do_something(arg1):
            pass

        put('task_xyz', 'val1')
    """
    tasks_queue.put((priority, {'name': name, 'args': args, 'kwargs': kwargs}))