前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 多线程特性1

python 多线程特性1

作者头像
py3study
发布2020-01-14 11:42:58
3770
发布2020-01-14 11:42:58
举报
文章被收录于专栏:python3

 多线程编程: 

         1. 用来加速程序的执行速度(并行);

         2.用来模拟生活中随机现象,比如:生产-消费问题,排队-等待问题等等;

下面的一个实例使用的就是: 1. 加速程序的执行速度(并行):

代码语言:javascript
复制
//1. 这个是一个threading.Thread的派生类, 用来处理多线程函数调用的。使用了装饰者模式
import threading 
from time import sleep, ctime

loops = (4,2)

class MyThread(threading.Thread):
    def __init__(self, func, args, name=''):
        threading.Thread.__init__(self) #base class func
        self.name = name
        self.func = func
        self.args = args

    # in the other way, use __call__()
    # Desiner patter -- Decorator
    def run(self):
        print '\n starting ', self.name, ' at:', \
              ctime()
        self.res = apply(self.func, self.args)
        print self.name, ' \nfinished at:', \
              ctime() , '\n'

    def getResult(self):
        return self.res

//2. 这里就是调用派生线程类来处理函数,使其并行执行,加速程序的执行
from threading_subclass_project_001 import MyThread
from time import ctime, sleep

def fib(x):
    sleep(0.005) #just for test
    if x<2: return 1
    return (fib(x-2)+fib(x-1))

def fac(x):
    sleep(0.1)
    if x<2: return 1
    return (x*fac(x-1))

def sum(x):
    sleep(0.1)
    if x<2: return 1
    return (x+sum(x-1))

#list of funcs pointer
funcs = [fib,fac,sum]
n = 12

def main():
    nfuncs = range(len(funcs))

    print '***SINGLE THREAD'
    for i in nfuncs:
        print 'starting', funcs[i].__name__, 'at:', \
              ctime()
        print funcs[i](n) #call the functions
        print funcs[i].__name__, 'finisthed at:', \
              ctime()

    print '\n*** MULTIPLE THREADS'
    threads = []
    for i in nfuncs:
        t = MyThread(funcs[i], (n,), funcs[i].__name__)
        threads.append(t)

    for i in nfuncs:
        threads[i].start()

    for i in nfuncs:
        threads[i].join()

    print 'all Done!'

if __name__ =='__main__':
    main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档