Python并发与并行教程(1)——引入线程

到现在为止我所写过的 python反例程序基本都是单线程程序,也就是从执行.py开始到结束只有一个流。然而有时候设计程序时会想要针对不同的需求需要拥有多个流程,也就是多线程程序,这样程序看起来就像并发的。

线程

在python中,如果想在主线程以外独立设计线程,可以使用threading模块
首先让我举一个例子来简单说明python中线程的使用。这里引用一个经典的龟兔赛跑游戏,赛程为10步,每一秒乌龟前进一步,兔子可能睡觉,可能前进两步,那照我们以前单线程的程序来写代码如下:

import random

flags = [True, False]
total_step=10
tortoise_step=0
hare_step=0

while tortoise_step<total_step and hare_step<total_step:
    total_step+=1
    sleeping = flags[int(random.randint()*10)%2]
    if sleeping:
        print('兔子睡着了')
    else:
        hare_step+=2

然而这时可能有人要说,为什么每次都是乌龟的步数先增加,而兔子的步数后增加呢,这对兔子是不是太不公平了?这就是单线程的弊端,那下面我们使用threading模块编写两个线程,一个代表乌龟,一个代表兔子,同时也为了简单介绍threading模块的用法。

import threading, random, time

def tortoise(total_step):
    step=0
    while step<total_step:
        step+=1
    print('乌龟跑了{}'.format(step))

def hare(total_step):
    step=0
    flags = [True, False]
    while step<total_step:
        slepping = flags[int(random.randint()*10)%2]
        if slepping:
            print('兔子睡着了')
        else:
            step+=2
            print('兔子跑了{}'.format(step))

#注意下面就是多线程的简单使用方法,target指明等会儿start方法调用的函数,args用来指明传递给函数的自变量,传递元组,因此使用(10,)
t = threading.Thread(target=tortoise, args=(10,))
h = threading.Thread(target=hare, args=(10,))

t.start()
h.start()

当然,python中也可以像java一样集成threading.Thread类,并在类中定义run方法来实现线程功能,不过在python中我们不建议这么做,也一般不这么做。
今天的讲解先到这里,我们下一期会讲线程的启动和停止。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,691评论 0 6
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,595评论 0 5
  • 一. 操作系统概念 操作系统位于底层硬件与应用软件之间的一层.工作方式: 向下管理硬件,向上提供接口.操作系统进行...
    月亮是我踢弯得阅读 6,033评论 3 28
  • python之进程、线程与协程 有这么个例子说他们的区别,帮助理解很有用。 有一个老板想开一个工厂生产手机。 他需...
    道无虚阅读 3,219评论 0 3
  • 1 没有任何人会成为你以为的、今生今世的避风港,只有你自己,才是自己最后的庇护所。再破败再简陋,也好过寄人篱下。 ...
    微微一笑_lxpp阅读 338评论 0 0