python自定义线程池控制线程数量

2020-01-07 11:59:03 浏览数 (1)

1.自定义线程池

代码语言:javascript复制
import threading
import Queue
import time

queue = Queue.Queue()


def put_data_in_queue():
    for i in xrange(10):
        queue.put(i)


class MyThread(threading.Thread):
    def run(self):
        while not queue.empty():
            sleep_times = queue.get()
            time.sleep(sleep_times)
            queue.task_done()


def main_function():
    threads_num = 6
    while True:
        put_data_in_queue()
        for i in xrange(threads_num):
            myThread = MyThread()
            myThread.setDaemon(True)
            myThread.start()
        queue.join()
        time.sleep(60)

2.多线程与signal信号的监控结合

代码语言:javascript复制
import threading
import Queue
import time
import signal

queue = Queue.Queue()
stop = False


def receive_signal(signum, stack):
    signal.signal(signal.SIGTERM, original_sigterm)
    global stop
    stop = True


def put_data_in_queue():
    for i in xrange(10):
        queue.put(i)


class MyThread(threading.Thread):
    def run(self):
        while not queue.empty():
            sleep_times = queue.get()
            time.sleep(sleep_times)
            queue.task_done()


def main_function():
    threads_num = 6
    while not stop:
        put_data_in_queue()
        for i in xrange(threads_num):
            myThread = MyThread()
            myThread.setDaemon(True)
            myThread.start()
        queue.join()
        time.sleep(60)


if __name__ == "__main__":
    original_sigterm = signal.getsignal(signal.SIGTERM)
    signal.signal(signal.SIGTERM, receive_signal)
    main_function()

0 人点赞