`
yeluowuhen
  • 浏览: 151297 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

python核心编程之18章线程

 
阅读更多
  1.  创建一个Thread的实例,传给它一个可调用的类对象        

     在练习18.5的例18.5时,照着例子抄错了,如下:

   #!/usr/bin/env python
import threading
from time import ctime,sleep
class ThreadFuc(object):
        def __init__(self,func,args,name=''):
                self.name=name
                self.func=func
                self.args=args
        def __call__(self):
                #apply(self.func,self.args)
                self.res=self.func(*self.args)
def loop(nloop,nsec):
        print("%s start at %s"%(nloop,ctime()))
        sleep(nsec)
        print("%s ended at %s"%(nloop,ctime()))
def main():
        nsect=[2,4]
        threads=[]
        nloop=range(len(nsect))
        print("thread start at %s"%ctime())
        for i in nloop:
                t=threading.Thread(target=ThreadFuc(loop,(i,nsect[i]),loop.__name__))
                threads.append(t)
        for i in nloop:
                threads[i].start()
        for i in nloop:
                threads[i].join()
        print("all done at %s"%ctime())
if __name__=='__main__':
        main()

         第21行应该为nsect[i],却抄例子写错为loop[i],结果运行后就报错如下:

Traceback (most recent call last):
  File "mtsleep4.py", line 28, in <module>
    main()
  File "mtsleep4.py", line 20, in main
    t=threading.Thread(target=ThreadFuc(loop,(i,loop[i]),loop.__name__))
TypeError: 'function' object is unsubscriptable

      即调用loop函数时找不到对应参数所以报错。此句即创建了一个ThreadFuc实例,比如a,此实例是可调用的,即运行a.call()。apply(self.func,self.args)在python1.6及以上版本中又可写为self.res=self.func(*self.args)。换句话说,即此实例执行self.res=loop(nsect[i])。这里loop为global值,如果将loop函数算入此类型的方法中,会报global name 'loop' is not defined。最终的运行结果如下:

 

thread start at Tue Jul  7 19:03:19 2015
0 start at Tue Jul  7 19:03:19 2015
1 start at Tue Jul  7 19:03:19 2015
0 ended at Tue Jul  7 19:03:21 2015
1 ended at Tue Jul  7 19:03:23 2015
all done at Tue Jul  7 19:03:23 2015

 

2. 从Thread派生一个类,创建这个类的一个实例myThread.py
#!/usr/bin/env python
import threading
from time import ctime,sleep
class MyThread(threading.Thread):
        def __init__(self,func,args,name=''):
                threading.Thread.__init__(self)
                self.name=name
                self.func=func
                self.args=args
        def run(self):
                apply(self.func,self.args)
                #self.res=self.func(*self.args)
def loop(nloop,nsec):
        print("%s start at %s"%(nloop,ctime()))
        sleep(nsec)
        print("%s ended at %s"%(nloop,ctime()))
def add(num):
        print("This is %s thread"%num)
def main():
        nsect=[2,4]
        threads=[]
        nloop=range(len(nsect))
        print("thread start at %s"%ctime())
        for i in nloop:
                t=MyThread(loop,(i,nsect[i]),loop.__name__)
                threads.append(t)
        for i in nloop:
                threads[i].start()
        for i in nloop:
                threads[i].join()
        print("all done at %s"%ctime())
if __name__=='__main__':
        main()
 
3.  利用步骤2的方式来完成斐波那契,阶乘和累加:
#!/usr/local/env python
from time import ctime,sleep
from  myThread import MyThread
def fib(n):
        sleep(0.0005)
        if (n==0):
                return 0
        elif n==1:
                return 1
        else: 
                return(fib(n-2)+fib(n-1))
def sum(n):
        sleep(0.1)
        if(n<=2):
                return 1
        else:
                return(sum(n-1)+n)
def mult(n):
        sleep(0.0001)
        if(n<2):
                return 1;
        else:
                return (n*mult(n-1))
def main():
        fiction=[mult,sum,fib]
        threads=[]
        num=12
        nloop=range(len(fiction))
        print("*****Single thread******")
        for i in nloop:
                print("%s thread starts at %s"%(fiction[i].__name__,ctime()))
                print(fiction[i](num))
                print("%s thread ends at %s"%(fiction[i].__name__,ctime()))
        print("*****Multi  threads******")
        for i in nloop:
                t=MyThread(fiction[i],(num,),fiction[i].__name__)
                threads.append(t)
        for i in nloop:
                threads[i].start()
        for i in nloop:
                threads[i].join()
                print(threads[i].getResult())

        print("Done!")
if __name__=='__main__':
        main()
        注意创建线程时,第二个参数是一个序列,而不是一个int值,这是apply函数所要求的。
4. 利用线程来实现生产者消费者:
#!/usr/local/env python
from myThread import MyThread
from Queue import Queue
from time import ctime,sleep
from random import randint
def writeQ(queue):
        if not queue.full():
                print("starting writer at %s"%ctime())
                queue.put("x")
                print("producing obj for Q...size now is %s"%queue.qsize())
def writer(queue,num):
        sleep(0.1)
        if num>0:
                for i in range(num):
                        writeQ(queue)
def readeQ(queue):
         if not queue.empty():
                print("starting condutor at %s"%queue.get())
                print("consumed obj for Q...size now is %s"%queue.qsize())
def reader(queue,num):
        sleep(0.6)
        if num> 0:
                for i in range(num):
                        readeQ(queue)
def main():
        q=Queue(10)
        threads=[]
        function=[writer,reader]
        nloop=range(len(function))
        print("***********Start production/conduction**************")
        for i in nloop:
                t=MyThread(function[i],(q,randint(2,4)),function[i].__name__)
                threads.append(t)
        for i in nloop:
                threads[i].start()
        for i in nloop:
                threads[i].join()
        print("*******************Done***************************")
if __name__=='__main__':
        main()
 
分享到:
评论

相关推荐

    python核心编程(第3版)

    《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI...

    Python编程笔记 Python开发知识总结整理 Python核心笔记 共51页.pdf

    【目录】 前言 【关于Python】 【关于《Python核心编程》(第二版)】 ...第十八章 多线程编程 第十九章 图形用户界面编程 第二十章 Web编程 第二十一章 数据库编程 第二十二章 扩展Python 第二十三章 其他话题

    Head First Python、Python核心编程

    Python核心编程 ·学习专业的Python风格、最佳实践和好的编程习惯; ·加强对Python对象、内存模型和Python面向对象特性的深入理解; ·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件...

    Python核心编程 高清 第3版 pdf 高清

    《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本。 《Python核心编程(第3版)》总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet...

    Python 核心编程 第二版

     第18章 多线程编程   18.1 引言/动机   18.2 线程和进程   18.3 Python、线程和全局解释器锁   18.4 thread模块   18.5 threading模块   18.6 相关模块   18.7 练习   第19章 图形用户...

    Python 核心编程 第二版.azw3

    第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程...

    Python 核心编程 第二版.pdf

    Python 核心编程》中文高清第二版。学习专业的Python风格、最佳实践和好的编程习惯;·加强对Python对象、内存模型和Python面向对象特性的深入理解;·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构...

    Python 核心编程 第二版.mobi

    第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程...

    python核心编程练习题(第一章)答案

    想进一步提升Python 编程水平?请深入分析真实应用 程序中使用的大量相关主题 t 涵盖了正则表达式、Internet/ 网络编程、GUI、SQL/ 数据库/ORM、线程、Web 开发 t 了解当前的开发趋势, 比如Google+、Twitter、 ...

    Python核心编程(第二版).pdf

    ·学习专业的Python风格、最佳实践和好的编程习惯; ·加强对Python对象、内存模型和Python面向对象特性的深入理解; ·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件; ·学习如何使用...

    Python核心编程代码

    第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式编程...

    Python核心编程第二版PDF

    ·学习专业的Python风格、最佳实践和好的编程习惯; ·加强对Python对象、内存模型和Python面向对象特性的深入理解; ·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件; ·学习如何...

    python核心编程 第二版 中文和答案

    通过用C等语言编写扩展来提升Python应用程序的性能 或者通过使用多线程增强I 0相关的应用程序的能力; 学习Python中有关数据库的API 以及如何在Python中使用各种不同的数据库系统 包括MySQL Postgres和 SQLite "&gt;...

    Python核心编程_第三版_高清非影印

    《Python核心编程(第3版)》是经典畅销图书《Python核心编程(第二版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI...

    Python核心编程 第二版

    《Python核心编程(第2版)》是经典的Python指导书,在第一版的基础上进行了全面升级。全书分为两个部分:第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、Python...

    Python核心编程第二版

    Python核心编程(第2版)是经典畅销图书《Python核心编程(第1版)》的全新升级版本,总共分为3部分。第1部分为讲解了Python的一些通用应用,包括正则表达式、网络编程、Internet客户端编程、多线程编程、GUI编程、...

    Python核心编程第二版(英)

     ·学习专业的Python风格、最佳实践和好的编程习惯;  ·加强对Python对象、内存模型和Python面向对象特性的深入理解;  ·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件;  ·学习...

    Python核心编程(第二版)PDF高清 part1 共2部分

    第1部分 Python核心 第1章 欢迎来到Python世界 第2章 快速入门 第3章 Python基础 ... 第18章 多线程编程 第19章 图形用户界面编程 第20章 Web编程 第21章 数据库编程 第22章 扩展Python 第23章 其他话题

    Python核心编程(中文第二版)

    ·学习专业的Python风格、最佳实践和好的编程习惯; ·加强对Python对象、内存模型和Python面向对象特性的深入理解; ·构建更有效的Web、CGI、互联网、网络和其他客户端/服务器架构应用程序及软件; ·学习如何...

Global site tag (gtag.js) - Google Analytics