def SvcDoRun(self): # start the queue in a separate thread queue = Queue() queue.start() cherrypy.tree.mount(QueueIndex(), '/') # in practice, you will want to specify a value for # server.log_file below or in your config file. If you # use a config file, be sure to use an absolute path to # it, as you can't be assured what path your service # will run in. cherrypy.config.update({ 'global':{ 'autoreload.on': False, 'server.log_to_screen': False, } }) # set init_only=True so that start() does not block cherrypy.server.start(init_only=True) # now, block until our event is set... win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
def SvcDoRun(self): # start the queue in a separate thread queue = Queue() queue.start() cherrypy.tree.mount(QueueIndex(), '/') # in practice, you will want to specify a value for # server.log_file below or in your config file. If you # use a config file, be sure to use an absolute path to # it, as you can't be assured what path your service # will run in. cherrypy.config.update({ 'global': { 'autoreload.on': False, 'server.log_to_screen': False, } }) # set init_only=True so that start() does not block cherrypy.server.start(init_only=True) # now, block until our event is set... win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
class QA_Thread(threading.Thread): ''' '这是一个随意新建线程的生产者消费者模型' 其实有个队列, 队列中保存的是 QA_Task 对象 , callback 很重要,指定任务的时候可以绑定 函数执行 QA_Engine 继承这个类。 ''' def __init__(self, queue=None, name=None): threading.Thread.__init__(self) self.queue = Queue() if queue is None else queue self.thread_stop = False self.__flag = threading.Event() # 用于暂停线程的标识 self.__flag.set() # 设置为True self.__running = threading.Event() # 用于停止线程的标识 self.__running.set() # 将running设置为True self.name = QA_util_random_with_topic(topic='QA_Thread', lens=3) if name is None else name self.idle = False def __repr__(self): return '<QA_Thread{} id={}>'.format(self.name, id(self)) def run(self): while self.__running.isSet(): self.__flag.wait() while not self.thread_stop: '这是一个阻塞的队列,避免出现消息的遗漏' try: if self.queue.empty() is False: _task = self.queue.get() # 接收消息 assert isinstance(_task, QA_Task) if _task.worker != None: _task.do() self.queue.task_done() # 完成一个任务 else: pass else: self.idle = True except Exception as e: pass def pause(self): self.__flag.clear() def resume(self): self.__flag.set() # 设置为True, 让线程停止阻塞 def stop(self): # self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话 self.__running.clear() self.thread_stop = True # 设置为False def __start(self): self.queue.start() def put(self, task): self.queue.put(task) def put_nowait(self, task): self.queue.put_nowait(task) def get(self, task): return self.get(task) def get_nowait(self, task): return self.get_nowait(task) def qsize(self): return self.queue.qsize()
# or disclosed in any way without written permission. # # # import cherrypy from queue import Queue from queue_index import QueueIndex # create a web service if __name__ == '__main__': # start the queue in a separate thread queue = Queue() queue.start() # start a cherrypy web service cherrypy.root = QueueIndex() cherrypy.config.update( { 'global': { 'server.socketPort': 8082, 'server.environment': 'production' } } ) cherrypy.server.start()
class QA_Thread(threading.Thread): ''' '这是一个随意新建线程的生产者消费者模型' 其实有个队列, 队列中保存的是 QA_Task 对象 , callback 很重要,指定任务的时候可以绑定 函数执行 QA_Engine 继承这个类。 ''' def __init__(self, queue=None, name=None): threading.Thread.__init__(self) self.queue = Queue() if queue is None else queue self.thread_stop = False self.__flag = threading.Event() # 用于暂停线程的标识 self.__flag.set() # 设置为True self.__running = threading.Event() # 用于停止线程的标识 self.__running.set() # 将running设置为True self.name = QA_util_random_with_topic(topic='QA_Thread', lens=3) if name is None else name self.idle = False def __repr__(self): return '<QA_Thread{} id={}>'.format(self.name, id(self)) def run(self): while self.__running.isSet(): self.__flag.wait() while not self.thread_stop: '这是一个阻塞的队列,避免出现消息的遗漏' try: if self.queue.empty() is False: _task = self.queue.get() # 接收消息 assert isinstance(_task, QA_Task) if _task.worker != None: _task.do() self.queue.task_done() # 完成一个任务 else: pass else: self.idle = True # Mac book下风扇狂转,如果sleep cpu 占用率回下降 # time.sleep(0.01) except Exception as e: raise e def pause(self): self.__flag.clear() def resume(self): self.__flag.set() # 设置为True, 让线程停止阻塞 def stop(self): # self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话 self.__running.clear() self.thread_stop = True # 设置为False def __start(self): self.queue.start() def put(self, task): self.queue.put(task) def put_nowait(self, task): self.queue.put_nowait(task) def get(self, task): return self.get(task) def get_nowait(self, task): return self.get_nowait(task) def qsize(self): return self.queue.qsize()
from threading import Thread import time from queue import Queue def producer(q, name): count = 1 while True: bz = name + "生产的包子{}".format(count) q.put(bz) print("bz", bz) time.sleep(1) count += 1 def consumer(q, name): while True: time.sleep(1) bz = q.get() print(name, "吃", bz) if __name__ == '__main__': q = Queue(5) p = Thread(target=producer, args=(q, "张三")) q = Thread(target=consumer, args=(q, "李四")) p.start() q.start()
class QA_Thread(threading.Thread): ''' 这是一个随意新建线程的生产者消费者模型' 其实有个队列, 队列中保存的是 QA_Task 对象 , callback 很重要,指定任务的时候可以绑定 函数执行 QA_Engine 继承这个类。 自带一个Queue 有 self.put/ self.put_nowait/ self.get/ self.get_nowait 4个关于queue的方法 如果你重写了run方法: 则你需要自行处理queue中的事情/简单的做你自己的逻辑 ''' def __init__(self, queue=None, name=None, daemon=False): threading.Thread.__init__(self) self.queue = Queue() if queue is None else queue self.thread_stop = False self.__flag = threading.Event() # 用于暂停线程的标识 self.__flag.set() # 设置为True self.__running = threading.Event() # 用于停止线程的标识 self.__running.set() # 将running设置为True self.name = QA_util_random_with_topic( topic='QA_Thread', lens=3 ) if name is None else name self.idle = False self.daemon = daemon def __repr__(self): return '<QA_Thread: {} id={} ident {}>'.format( self.name, id(self), self.ident ) def run(self): while self.__running.isSet(): self.__flag.wait() while not self.thread_stop: '这是一个阻塞的队列,避免出现消息的遗漏' try: if self.queue.empty() is False: _task = self.queue.get() # 接收消息 #print(_task.worker, self.name) assert isinstance(_task, QA_Task) if _task.worker != None: _task.do() self.queue.task_done() # 完成一个任务 else: pass else: self.idle = True # Mac book下风扇狂转,如果sleep cpu 占用率回下降 # time.sleep(0.01) except Exception as e: if isinstance(e, ValueError): pass else: raise e def pause(self): self.__flag.clear() def resume(self): self.__flag.set() # 设置为True, 让线程停止阻塞 def stop(self): # self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话 self.__running.clear() self.thread_stop = True # 设置为False def __start(self): self.queue.start() def put(self, task): self.queue.put(task) def put_nowait(self, task): self.queue.put_nowait(task) def get(self): return self.queue.get() def get_nowait(self): return self.queue.get_nowait() def qsize(self): return self.queue.qsize()
class QA_Thread(threading.Thread): '这是一个随意新建线程的生产者消费者模型' def __init__(self, queue=None, name=None): threading.Thread.__init__(self) self.queue = Queue() if queue is None else queue self.thread_stop = False self.__flag = threading.Event() # 用于暂停线程的标识 self.__flag.set() # 设置为True self.__running = threading.Event() # 用于停止线程的标识 self.__running.set() # 将running设置为True self.name = QA_util_random_with_topic(topic='QAWorker', lens=3) if name is None else name def __repr__(self): return '< QA_Thread {} >'.format(self.name) def run(self): while self.__running.isSet(): self.__flag.wait() while not self.thread_stop: '这是一个阻塞的队列,避免出现消息的遗漏' try: if self.queue.empty() is False: _task = self.queue.get() # 接收消息 assert isinstance(_task, QA_Task) if _task.worker != None: _task.do() self.queue.task_done() # 完成一个任务 else: pass else: # QA_util_log_info("From Engine %s Engine will waiting for new task ..." % str( # threading.current_thread())) pass except: # time.sleep(0.1) self.run() # __res = self.qsize() # 判断消息队列大小 # if __res > 0: # pass # # QA_util_log_info("From Engine %s: There are still %d tasks to do" % ( # # str(threading.current_thread()), __res)) #threading.Timer(0.005, self.run) def pause(self): self.__flag.clear() def resume(self): self.__flag.set() # 设置为True, 让线程停止阻塞 def stop(self): # self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话 self.__running.clear() self.thread_stop = True # 设置为False def __start(self): self.queue.start() def put(self, task): self.queue.put(task) def put_nowait(self, task): self.queue.put_nowait(task) def get(self, task): return self.get(task) def get_nowait(self, task): return self.get_nowait(task) def qsize(self): return self.queue.qsize()
# # PROPRIETARY INFORMATION. This software is proprietary to # Southpaw Technology, and is not to be reproduced, transmitted, # or disclosed in any way without written permission. # # # import cherrypy from queue import Queue from queue_index import QueueIndex # create a web service if __name__ == '__main__': # start the queue in a separate thread queue = Queue() queue.start() # start a cherrypy web service cherrypy.root = QueueIndex() cherrypy.config.update({ 'global': { 'server.socketPort': 8082, 'server.environment': 'production' } }) cherrypy.server.start()