并发编程,在哪个语言里都属于高端应用,一定得会了才好意思说懂了这门语言。
在工作中用得并不是很多,忘了一些内容,就慢慢看,慢慢补上。
今天一天看了近三分之一(我看外文越来越快了??:)),
实践一下多线程的threading模块。
#coding: utf-8import logging, threadingfrom Queue import Queuelogger = logging.getLogger()logger.setLevel(logging.DEBUG)formatter = logging.Formatter('%(asctime)s - %(message)s')ch = logging.StreamHandler()ch.setLevel(logging.DEBUG)ch.setFormatter(formatter)logger.addHandler(ch)fibo_dict = {}shared_queue = Queue()input_list = [30, 10, 55, 71]queue_condition = threading.Condition()def fibonacci_task(condition): with condition: while shared_queue.empty(): logger.info("[%s] - waiting for elements in queue..." % threading.current_thread().name) condition.wait() else: value = shared_queue.get() a, b = 0, 1 for item in range(value): a, b = b, a + b fibo_dict[value] = a shared_queue.task_done() logger.debug("[%s] fibonacci of key [%d] with result [%d]" % (threading.current_thread().name, value, fibo_dict[value]))def queue_task(condition): logging.debug('Starting queue_task...') with condition: for item in input_list: shared_queue.put(item) logging.debug("Notifying fibonacci_task threads that the queue is ready to consume...") condition.notifyAll()threads = [threading.Thread(target=fibonacci_task, args=(queue_condition,)) for i in range(4)][thread.start() for thread in threads]prod = threading.Thread(name="queue_task_thread", target=queue_task, args=(queue_condition,))prod.start()[thread.join() for thread in threads]