Example #1
0
    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) 
Example #2
0
    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)
Example #3
0
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()
Example #4
0
# 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()
Example #6
0
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()
Example #7
0
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()
Example #9
0
#
# 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()