多线程的 Python 教程——“贪吃蛇” .pdfVIP

多线程的 Python 教程——“贪吃蛇” .pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程的 Python 教程——“贪吃蛇” .pdf

BBS.SASAOO.COM -- 财经 医疗 软件 娱乐 养生 综合信息论坛 多线程的 Python 教程—— “贪吃蛇” 本指南的里代码可以在这里下载: threadworms.py ,或者从 GitHub。代码需要 Python 3 或 Python 2 ,同时 也需要安装 Pygame 。 点击查看大版本图片 这是一篇为初学者准备的关于 线程和Python 中的多线程编程的指南。如果你有一些 类(class)的基础知识(什么 是类,如何定义方法(method),还有方法总是将self 作为他的第一个参数,子类是什么以及子类如何从父类继承一 个方法,等等)这篇指南会对你有所帮助。 这里有一篇较为深入地介绍类(class)的指南。 我们用到的例子是 “贪吃蛇” 的克隆,它有很多条在一个格子状的区域前行的蠕虫,每一条虫子在一个单独的线程 里运行。 如果你知道线程相关的知识,那就跳过这一章节,看看线程在Python 中如何使用。 当你运行一个普通的Python 程序时,这个程序从第一行开始,一行接一行的的执行。循环和函数可能让程序上下 跳转,但是给定一行代码的位置,你可以轻易地找到下一行从哪里执行。你可以把一根手指指到你的.py 文件中, 一行一行的追踪你的程序执行到哪里了。这就是单线程编程(single-threaded programming) 。 然而,使用多个线程就像将第二跟手指放到屏幕上。每个手指还是像之前那样移动,但是它们现在是同时在移动。 但是事实上,它们并不是同时的。你的手指在交替着移动。拥有多核心(multicore)的处理器可以真正意义上的同时 执行两条指令,但是Python 程序有一个叫做 GIL (全局解释器锁 global interpreter lock) 东西,它会限制Python 程序单核执行。 BBS.SASAOO.COM BBS.SASAOO.COM -- 财经 医疗 软件 娱乐 养生 综合信息论坛 线程是什么?为什么线程很有用? Python 的解释器会一会儿执行一个线程,一会儿执行另一个线程。但是这切换的速度如此之快,快的让你根本无 法察觉,以至于这些线程看起来像是同时执行。 你可以在你的Python 程序中开几十或者几百个线程(那真是好多的手指)。这并不能让你的程序快上几十上百倍(事 实上这些线程还是在使用同一个CPU),但是它能让你的程序更强大,更高效。 举个例子,你要写个函数,这个函数会下载一个内容全是名字的文件,然后将这个文件的内容排序,然后将排序好 的内容存为另一个文件。如果这里有上百个这样的文件,那么你可能会在一个循环中调用这个函数来处理每个文件: 下载,排序,保存,下载,排序,保存,下载,排序,保存... 这三个步骤用到了你电脑上的不同资源:下载用到了网络,排序用到了CPU,保存文件用到了硬盘。同时,这三 个操作都可能被延缓。例如,你下在文件的服务器可能很慢,或者你的带宽很小。 这种情况先,使用多个线程,每个线程处理一个文件是一个比较明智的选择。这不仅能更好的利用你的带宽,而且 当你的CPU 工作的时候,网络也在工作。这将更有效的利用你的电脑。 是什么让多线程编程那么棘手? 当然,在上面的例子,每个线程只做它自己独立的事情也不需要去和其他线程通信或同步任何东西。你可以只编写 简单的下载-排序-写入程序的单线程版本同时独立地运行程序上百遍。(尽管它可能在每次打字和点击来运行每个 程序来下载不同文件的时候有点痛苦。) 大多数多线程程序共享访问相同的变量,但这就是棘手的东西。 来自 Brad Montgomery 的图片) BBS.SASAOO.COM BBS.SASAOO.COM -- 财经 医疗 软件 娱乐 养生 综合信息论坛 这里是一个常用的比喻:告诉你有两个售票机器人。它们的任务很简单: 1. 询问消费者要哪个位置。 2. 检查列表看下座位是不是可以用。 3. 获取该座位的票。 4. 从列表上移出改座位。 一个顾客问机器A 要42 号座位的票。机器A 从列表中检查和发现座位可以用,因此它获取到那张票。但在机器A 能从列表中删除改座位的前,机器B 被不同顾客询问42 号座位。机器B 检查列表也看到了座位仍然可以用,所以 它尝试获取到这个座位的票。但是机器B 不能找到42 号座位的票。这计算不了了,同时机器B 的电子大脑也爆炸 了。机

文档评论(0)

gdkb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档