资讯专栏INFORMATION COLUMN

Python入门之初涉线程

chuyao / 891人阅读

摘要:由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,也不例外,并且,的线程是真正的,而不是模拟出来的线程。多任务可以由多进程完成,也可以由一个进程内的多线程完成。是模块中最重要的类之一,可以使用它来创建线程。

由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。
多任务可以由多进程完成,也可以由一个进程内的多线程完成。

Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类,重写它的run方法;另一种是创建一个threading.Thread对象,在它的初始化函数(__init__)中将可调用对象作为参数传入。
看到一篇比较好的介绍线程的文章:http://python.jobbole.com/81546/

下面是一个拷贝过来的代码,比较有意思,multi_main()函数中的print去掉之后代码效率会降低很明显。添加一个print或者换成time.sleep(0.1),多线程的效率会迅速追上单线程,然而,是不是就仅仅止步于此了呢?不妨思考一下,那么python中的多线程又有何意义?

from threading import Thread
import time
#python在多线程的情况下居然比单线程整整慢了26%
def counter():
    i = 0 
    for j in range(50000000):
        i += 1
    return True

def main():
    start_time = time.time()
    for tid in range(2):
        t = Thread(target=counter)
        t.start()
        
        t.join()
        
    end_time = time.time()
    print ("total time of single is: {}".format(end_time - start_time))

def multi_main():
    thread_all = []
    start_time = time.time()
    for tid in range(2):
        t = Thread(target=counter)
        t.start()
        thread_all.append(t)
        #print("0")#去掉这行代码,代码效率将降低,也可以在此sleep 0.1s
        
    for i in range(2):
        thread_all[i].join()
    end_time = time.time()
    print ("total time of multi is: {}".format(end_time -start_time))

if __name__ == "__main__":
    main()
    multi_main()

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38339.html

相关文章

  • 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    摘要:的选择器允许单个线程监视多个输入通道。一旦执行的线程已经超过读取代码中的某个数据片段,该线程就不会在数据中向后移动通常不会。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本文中,将尝试用简明扼要的文字,阐明Java NIO和经典IO之...

    Meils 评论0 收藏0
  • Python

    摘要:最近看前端都展开了几场而我大知乎最热语言还没有相关。有关书籍的介绍,大部分截取自是官方介绍。但从开始,标准库为我们提供了模块,它提供了和两个类,实现了对和的进一步抽象,对编写线程池进程池提供了直接的支持。 《流畅的python》阅读笔记 《流畅的python》是一本适合python进阶的书, 里面介绍的基本都是高级的python用法. 对于初学python的人来说, 基础大概也就够用了...

    dailybird 评论0 收藏0
  • Python爬虫学习路线

    摘要:以下这些项目,你拿来学习学习练练手。当你每个步骤都能做到很优秀的时候,你应该考虑如何组合这四个步骤,使你的爬虫达到效率最高,也就是所谓的爬虫策略问题,爬虫策略学习不是一朝一夕的事情,建议多看看一些比较优秀的爬虫的设计方案,比如说。 (一)如何学习Python 学习Python大致可以分为以下几个阶段: 1.刚上手的时候肯定是先过一遍Python最基本的知识,比如说:变量、数据结构、语法...

    liaoyg8023 评论0 收藏0
  • 「码个蛋」2017年200篇精选干货集合

    摘要:让你收获满满码个蛋从年月日推送第篇文章一年过去了已累积推文近篇文章,本文为年度精选,共计篇,按照类别整理便于读者主题阅读。本篇文章是今年的最后一篇技术文章,为了让大家在家也能好好学习,特此花了几个小时整理了这些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 让你收获满满! 码个蛋从2017年02月20...

    wangtdgoodluck 评论0 收藏0

发表评论

0条评论

chuyao

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<