并发编程,在哪个语言里都属于高端应用,一定得会了才好意思说懂了这门语言。
在工作中用得并不是很多,忘了一些内容,就慢慢看,慢慢补上。
今天一天看了近三分之一(我看外文越来越快了??:)),
实践一下多线程的threading模块。
#coding: utf-8 import logging, threading from Queue import Queue logger = 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]