Python并发编程之创建多线程的几种方法(二)
今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础。学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章。 本文目录 学会使用函数创建多线程 学会使用类创建多线程 多线程:必学函数讲解 经过总结,Python创建多线程主要有如下两种方法: 函数 类 接下来,我们就来揭开多线程的神秘面纱。 . 学会使用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多线程。 threading.Thread() 一般接收两个参数: 线程函数名:要放置线程让其后台执行的函数,由我们自已定义,注意不要加(); 线程函数的参数:线程函数名所需的参数,以元组的形式传入。若不需要参数,可以不指定。 举个例子 1import time 2from threading import Thread 3 4# 自定义线程函数。 5def main(name=”Python”): 6 for i in range(2): 7 print(“hello”, name) 8 time.sleep(1) 9 10# 创建线程01,不指定参数 11thread_01 = Thread(target=main) 12# 启动线程01 13thread_01.start() 14 15 16# 创建线程02,指定参数,注意逗号 17thread_02 = Thread(target=main, […]
盘点 Python 中的那些冷知识(一)
小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来。 现在已经积攒了一些了,最近打算整理一波,发出来给大家补补。一篇只分享五个,有时间了就整理。不想错过的,千万记得关注一下。 1. 省略号也是对象 … 这是省略号,在Python中,一切皆对象。它也不例外。 在 Python 中,它叫做 Ellipsis 。 在 Python 3 中你可以直接写…来得到这玩意。 >>> … Ellipsis >>> type(…) <class ‘ellipsis’> 而在 2 中没有…这个语法,只能直接写Ellipsis来获取。 >>> Ellipsis Ellipsis >>> type(Ellipsis) <type ‘ellipsis’> >>> 它转为布尔值时为真 >>> bool(…) True 最后,这东西是一个单例。 >>> id(…) 4362672336 >>> id(…) 4362672336 这东西有啥用呢?据说它是Numpy的语法糖,不玩 Numpy 的人,可以说是没啥用的。 在网上只看到这个 用 … 代替 pass ,稍微有点用,但又不是必须使用的。 try: 1/0 except ZeroDivisionError: … 2. 类首字母不一定是大写 在正常情况下,我们所编写的所见到的代码,好像都默许了类名首字母大写,而实例用小写的这一准则。但这并不是强制性的,即使你反过来的也没有关系。 但有一些内置的类,首字母都是小写,而实例都是大写。 比如 bool 是类名,而 […]
Python并发编程之深入理解yield from语法(八)
大家好,并发编程 进入第八篇。 直到上一篇,我们终于迎来了Python并发编程中,最高级、最重要、当然也是最难的知识点–协程。 当你看到这一篇的时候,请确保你对生成器的知识,有一定的了解。当然不了解,也没有关系,你只要花个几分钟的时间,来看下我上一篇文章,就能够让你认识生成器,入门协程了。 再次提醒: 本系列所有的代码均在Python3下编写,也建议大家尽快投入到Python3的怀抱中来。 本文目录 为什么要使用协程 yield from的用法详解 为什么要使用yield from . 为什么要使用协程 在上一篇中,我们从生成器的基本认识与使用,成功过渡到了协程。 但一定有许多人,只知道协程是个什么东西,但并不知道为什么要用协程?换句话来说,并不知道在什么情况下用协程? 它相比多线程来说,有哪些过人之处呢? 在开始讲yield from 之前,我想先解决一下这个给很多人带来困惑的问题。 举个例子。 假如我们做一个爬虫。我们要爬取多个网页,这里简单举例两个网页(两个spider函数),获取HTML(耗IO耗时),然后再对HTML对行解析取得我们感兴趣的数据。 我们的代码结构精简如下: def spider_01(url): html = get_html(url) … data = parse_html(html) def spider_02(url): html = get_html(url) … data = parse_html(html) 我们都知道,get_html()等待返回网页是非常耗IO的,一个网页还好,如果我们爬取的网页数据极其庞大,这个等待时间就非常惊人,是极大的浪费。 聪明的程序员,当然会想如果能在get_html()这里暂停一下,不用傻乎乎地去等待网页返回,而是去做别的事。等过段时间再回过头来到刚刚暂停的地方,接收返回的html内容,然后还可以接下去解析parse_html(html)。 利用常规的方法,几乎是没办法实现如上我们想要的效果的。所以Python想得很周到,从语言本身给我们实现了这样的功能,这就是yield语法。可以实现在某一函数中暂停的效果。 试着思考一下,假如没有协程,我们要写一个并发程序。可能有以下问题 1)使用最常规的同步编程要实现异步并发效果并不理想,或者难度极高。 2)由于GIL锁的存在,多线程的运行需要频繁的加锁解锁,切换线程,这极大地降低了并发性能; 而协程的出现,刚好可以解决以上的问题。它的特点有 协程是在单线程里实现任务的切换的 利用同步的方式去实现异步 不再需要锁,提高了并发性能 . yield from的用法详解 yield […]