def on_request(self, msgid, msg): """ Handles a REQUEST command Messages are formatted like this: [subcmd(str), { ...options... }] Subcommands: run - run some callable. Options: { 'callable': func or method name (eg. walk), 'path': module path (eg. os.path), 'args': (optional) list of args, 'kwargs': (optional) dict of kwargs, 'class_args': (optional) list of args for class instantiation, 'class_kwargs': (optional) dict of kwargs for class, } .. note: If you want to run a method from a class you must specify the class name in the path preceeded with a colon. 'name.of.mypacakge:MyClass' """ # s_ indicates the string path vs the actual module and class # queue_name = msg[0] # Parse REQUEST message values self.total_requests += 1 headers = msg[1] payload = deserializer(msg[2]) params = payload[1] if 'reply-requested' in headers: callback = 'worker_done_with_reply' else: callback = 'worker_done' timeout = get_timeout_from_headers(headers) payload = {} payload['params'] = params payload['timeout'] = timeout payload['msgid'] = msgid payload['callback'] = callback self.jobs_in_flight[msgid] = (monotonic(), payload) self.request_queue.put(payload)
def on_request(self, msgid, msg): """ Handles a REQUEST command Messages are formatted like this: [subcmd(str), { ...options... }] Subcommands: run - run some callable. Options: { 'callable': func or method name (eg. walk), 'path': module path (eg. os.path), 'args': (optional) list of args, 'kwargs': (optional) dict of kwargs, 'class_args': (optional) list of args for class instantiation, 'class_kwargs': (optional) dict of kwargs for class, } .. note: If you want to run a method from a class you must specify the class name in the path preceeded with a colon. 'name.of.mypacakge:MyClass' """ # s_ indicates the string path vs the actual module and class # queue_name = msg[0] # Parse REQUEST message values headers = msg[1] payload = deserializer(msg[2]) params = payload[1] if 'reply-requested' in headers: callback = self.worker_done_with_reply else: callback = self.worker_done timeout = get_timeout_from_headers(headers) # kick off the job asynchronously with an appropiate callback self.workers.apply_async(func=worker.run, args=(params, msgid, timeout), callback=callback)