李兴球Python三bug多线程示例程序演示动图

想像一下许多虫子在屏幕上爬来爬去的情景吧。用Python实现是完全可以的,我们可以用turtle模块,即海龟画图模块来实现。让海龟的造型为一张图片,不过遗憾地是由于海龟画图不支持图像旋转,所以用这个模块实现就比较难了。当然,你是高手的话可以加入numpy或pillow模块,自己编程去实现。这里用一种简单的方法来实现。它已经帮我们实现好了,我们只要简单地调用即可。这个模块叫Python精灵模块,英文名为sprites。你可以认为sprites模块是turtle模块的凤凰涅磐。它是turtle模块的重大升级版。所以当你用from sprites import *语句导入了所有命令,不要再用from turtle import *命令了。因为后者会覆盖前者的同名命令。

那么如何安装sprites模块呢?用pip install sprites命令即可。现实情况下由于要访问国外的服务器,所以安装速度在某些地方很慢以致于安装不上。所以我们要用cmd打开管理员窗口,用下面的命令进行安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites –upgrade
上面是从清华大学服务器下载sprites模块,然后安装的,由于从国内服务器下载,所以速度非常快。安装好后,用from sprites import Sprite,Screen语句可以导入Sprite类和Screen函数。然后用Sprite()就能新建一只虫子,假设取名为bug,那么命令如下所示:

from sprite import Sprite,Screen
bug = Sprite()

接下来就可以让bug不断地满屏爬了。简单化一下,来一个while循环。

while True 代码的控制结构。它可以让同组代码不断地重复执行。bug.fd(1)可以让bug前进一个单位,bug.right(1)可以让虫子右转,简写为bug.rt(1),代码变成了像下面这样:

from sprites import Sprite,Screen
bug = Sprite()                # 新建角色,名为bug
while True:                   # 重复执行 bug.fd(1)                 # 虫子前进1个单位bug.rt(1)                 # 虫子右转1个单位

李兴球Python一只虫子爬

上面的程序运行后,就能看到一只虫子爬了。如果要有更多的虫子爬,我们只要新建更多的角色即可。程序变成像下面这样了:

from sprites import Sprite,Screen
​
bug1 = Sprite()        # 新建虫子1
​
bug2 = Sprite()        # 新建虫子2
bug2.goto(100,100)     # bug2的坐标定位到(100,100)
​
bug3 = Sprite()        # 新建虫子3
bug3.goto(-100,100)    # bug3的坐标定位到(-100,100)  while True:            # 当成立的时候(重复执行)bug1.fd(1)         # 虫子1前进1个单位bug1.rt(1)         # 虫子1向右转1个单位
​bug2.fd(1)         # 虫子2前进1个单位bug2.rt(1)         # 虫子2向右转1个单位bug3.fd(1)         # 虫子3前进1个单位bug3.lt(1)         # 虫子3向左转1个单位

上面goto命令和海龟画图中的goto命令是一样的,都是定位角色坐标的。

李兴球Python多线程动画

上面的程序是单线程的,只有一个while循环。如果想有几个while循环同时执行的话就要使用多线程编程了。接下来我们导入Thread,用from threading import *即可。我们这里创建三个线程,每个线程的目标函数会创建一个虫子角色,然后通过while循环让名为bug的虫子不断地爬。这个函数就像下面这样:

def myt1():
bug = Sprite()
while True:
bug.fd(1)
bug.rt(1)

函数定义好了,我们就能用Thread命令来创建线程了,语句如下所示:
thread1 = Thread(target=myt1)
最后,我们只要简单地调用thread1的start方法就能启动这个线程了。

代码如下所示:

thread1.start()

那么创建三个线程,只要定义三个函数,启动三个线程就可以了。最后,多线程虫子爬的代码如下所示:

"""三bug多线程示例程序.py本程序创建了三个线程,每个线程都会创建一个bug。bug定位后会不断地旋转。本程序需要Python精灵模块支持,请用cmd命令,打开管理员窗口,然后输入以下使命令进行安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sprites   --upgrade
​
"""
​
from threading import *
from sprites import Sprite,Screen
​
def myt1():bug = Sprite()while True:bug.fd(1)bug.rt(1)def myt2():bug = Sprite()bug.goto(100,100)while True:bug.fd(1)bug.lt(1)
​
def myt3():bug = Sprite()bug.goto(-100,100)while True:bug.fd(1)bug.lt(1)
​
screen = Screen()                  # 新建屏幕对象
​
thread1 = Thread(target=myt1)      # 创建一个线程
thread2 = Thread(target=myt2)      # 创建一个线程
thread3 = Thread(target=myt3)      # 创建一个线程
​
thread1.start()                    # 启动线程1
thread2.start()                    # 启动线程2
thread3.start()                    # 启动线程3
​
screen.mainloop()
​

​更高级的编程方法是可以创建一个Bug类。它继承自Sprite类。​当Bug生成后会自动创建一个线程,自己爬。不过这已经超出本篇论述范围,高级读者可以尝试自行完成。

​使用Python精灵模块能非常简单的创建动画与游戏,更多Python创意/示例源或作品与教程请打开李兴球博客 www.lixingqiu.com

虫子满屏爬_三bug多线程示例程序浅析相关推荐

  1. 一个多线程示例程序的BUG修复

    一个多线程示例程序的BUG修复 在<.NET 4.0面向对象编程漫谈 >的<应用篇>一书中,我介绍了一个使用"信号量(Semaphore) "同步对象模拟多 ...

  2. 让电脑代码满屏飞_程序员想让你的电脑死机,需要多久?

    诸多行业中,程序员应该是一个比较特殊的群体,许多人一提起程序员,脑子里除了高新之外,总会不自觉的和木讷.拖沓联系在一起. 而且现在的网络发达,网络中大量的黑程序员的段子,许多人根本没有接触过程序员,但 ...

  3. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  4. video 满屏显示_微信video标签视频设置全屏属性

    微信video标签视频设置全屏属性,支持安卓和ios系统的视频控制器和播放按钮隐藏和视频全屏,微信使用的内核是X5 x-webkit-airplay="true" x5-video ...

  5. java开发前的准备工作_三、开发java程序前的准备工作

    JDK[Java development kit]:Java开发工具包 JRE[Java runtime environment]:Java运行环境 JVM[Java virtual machine] ...

  6. python物联网通信_物联网通信RESTDemo示例程序(Python版本)

    源码下载 app.py #!/usr/bin/python # -*- coding:utf-8 -*- from commondlib.help.ini import * from commondl ...

  7. java公钥加密私钥解密_公钥加密,私钥解密示例程序(JAVA)详解

    公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥:一个保密,称为私钥,公钥与私钥必须 ...

  8. 虫子屏保_虫子赏金动物园之旅

    虫子屏保 Bug bounty programs- They all seem similar, but are they really all the same? Bug赏金计划--它们看上去都相似 ...

  9. qq满屏飞吻代码_教你用微信隐藏代码表白!各种微信技巧

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.每天都会有分享,都是免费订阅,请您放心关注.注:本文转载自网络,不代表 ...

最新文章

  1. Oracle 常用SQL技巧收藏
  2. 详解布隆过滤器的原理、使用场景和注意事项
  3. swagger导出excel文档_将Swagger2文档导出为HTML或markdown等格式离线阅读
  4. sscli 2.0 简介
  5. 那些云中的负载均衡器——Azure、AWS和NetScaler
  6. LeetCode刷题(21)
  7. 左连接只匹配一条数据_数据库左连接、右连接、内连接、全连接区别
  8. 为什么对项目总结产生了分赴
  9. mysql2008完全卸载教程_完美卸载SQL Server 2008的方法
  10. AMESim2020MATLAB2020b联合仿真设置
  11. 金士顿u盘数据恢复软件推荐
  12. java输出100以内的所有质数
  13. 系统同步网络时间服务器不可用,电脑时间同步出错 RPC服务器不可用解决方案...
  14. 关于android属性persistent的问题
  15. java.lang.abstractmethoderror
  16. 【FFT】HDU4609-3 idiots
  17. 《上古天真论》第五讲文字版
  18. 无可比拟的视觉环绕感 电子竞技游戏显示器就该选这样的带鱼屏
  19. SaaS,iass 和pass,你知道吗?
  20. 程序员成长的四个简单技巧,你 get 了吗?

热门文章

  1. 前端案例——2.仿淘宝关闭二维码案例
  2. 微信小程序(1)新闻小应用代码以及总结小程序一些知识点
  3. 【算法】整数拆分问题
  4. 手机浏览器java_三款最热java手机浏览器横评(组图)
  5. 用PHP实现Instagram滤镜效果
  6. Linux之NTFS、FAT32、exFAT 各种格式硬盘挂载整理
  7. 复变函数-复指数形式
  8. 微信Web APP应用
  9. 0x00007FFE51EF1208 (ucrtbase.dll)considers invalid parameters fatal.
  10. 仿微信朋友圈点击评论自动定位到对应位置