再读《Parallel Programming with Python》并作笔记

并发编程,在哪个语言里都属于高端应用,一定得会了才好意思说懂了这门语言。

在工作中用得并不是很多,忘了一些内容,就慢慢看,慢慢补上。

今天一天看了近三分之一(我看外文越来越快了??:)),

实践一下多线程的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]

  

时间: 2024-09-23 18:24:25

再读《Parallel Programming with Python》并作笔记的相关文章

再读《诫子书》

再读<<诫子书>>   原文: 夫君子之行,静以修身,俭以养德.非淡泊无以明志,非宁静无以致远.夫学须静也,才须学也,非学无以广才,非志无以成学.淫慢则不能励精,险躁则不能治性.年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及! 好些年前曾读过诸葛亮的<<诫子书>>,于其中的道理亦是是懂非懂,更确切的说是知其一而不知其二.近来终于有得闲暇,不得不已的闲暇想起了这篇著名的家书.想想我们,曾几何时,有几多空闲留给自己来反思自己的人生,反思生命?更多的是

用c# 写的一个tcp client 发一个指令再读硬件发回来的数据,无法读取

问题描述 用c# 写的一个tcp client 发一个指令再读硬件发回来的数据,无法读取 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Window

《The C Programming Language》读书笔记总结 &amp;lt;一&amp;gt;.基础篇

写了这么多年的C代码,回过头来再看<The C Programming Language>这本书,作者Brian W. Kernighan和C语言之父Dennis M. Ritchie.感觉里面的知识和书的架构给人非常"合理"的感觉.怎么个合理法呢? 首先书中的代码,如else-if中使用binsearch函数介绍二分查找.atoi介绍字符串s转换为整数.计算器逆波兰表达式,都是实际中非常经典且常用的知识: 然后书中大部分的程序都是基于stdlib.h.string.h.c

python学习笔记第二章:安装python

记得上次写python的学习笔记是三个月以前了,期间看过,也放下过,这次要坚持下来,一鼓作气,吃下python. 本文内容主要是根据<Python 简明教程>和自己的一些理解去写的,有问题,还请指出. 一.Linux 下安装 如果你使用的是linux操作系统,那么恭喜你,你基本上可以不用去安装python,因为大多数linux的操作系统在安装系统的时候就已经默认安装了python. 要测试你的系统是否已经安装了python,可以执行如下命令 python -v 显示如下的python版本信息,

python学习笔记第三章:最初的步骤

今天从笔记的标题来看,你可能会很困惑,什么"最初的步骤"?这个标题是我引用了<python简明教程>中第三章的标题,给大家解释下就会都明白了. "最初的步骤"主要讲的就是 你刚才学习.练习python所用到的一些编辑器和执行python代码的方式. 一.使用带提示符的编辑器 "带提示符的编辑器" 也就是linux系统使用的终端,Windows系统中使用的命令提示符. 在linux终端shell提示符下输入python,启动pthon解

python学习笔记:语言、调试、语法、变量、表达式

python是编程语言的一种,有着传统编程语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性.总结一句话来概括就是:很好很强大! 1.编程语言就是编写程序的语言,而程序是根据语言提供的指令,按照一定的逻辑顺序,对获得的数据进行运算,并将结果最终返回给我们的指令和数据的组合.语言分为两种: 低级语言:用英文单词或单词的缩写代表计算机执行的指令,使编程的效率和程序的可读性都有了较大的提高.    高级语言:是人类逻辑思维的程序化.数字化和精确化数学描述,翻译成机器代码有两种方法,解释和编译

[Python]学习笔记之文件和异常

python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目录名:os.listdir() 函数用来删除一个文件:os.remove() 删除多个目录:os.removedirs(r"c:\python") 检验给出的路径是否是一个文件:os.path.isfile() 检验给出的路径是否是一个目录:os.path.isdir() 判断是否是绝对路

Python学习笔记(一)(基础入门之环境搭建)_python

  Python入门       本系列为Python学习相关笔记整理所得,IT人,多学无害,多多探索,激发学习兴趣,开拓思维,不求高大上,只求懂点皮毛,作为知识储备,不至于落后太远.      本文主要介绍Python的相关背景,环境搭建. 一.了解Python      1,关于Python的语言特点:      借用Python官网Https://www.python.org的解释: Python is powerful... and fast; plays well with other

问一下高手们这种情况我怎么给类里赋值,然后再读出来

问题描述 就是我现在是设计了一个类,两个方法,然后我要从页面后台(就是数据库),读值进去,赋给类,然后类做完操作之后再给我放回数据库去.目前的代码是这样://获取值point=Convert.ToInt32(dt.Rows[0]["point"]);grade=Convert.ToInt32(dt.Rows[0]["grade"]);i=df.Rows.Count;//那个类publicclassCRules{publiclongrules(intgrade,int