码迷,mamicode.com
首页 > 编程语言 > 详细

python并行并发

时间:2018-02-02 20:15:14      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:als   单线程   style   独立   art   bsp   并发   需求   介绍   

并发

当我们执行.py从开始到结束只有一个流程的时候,这种是单线程程序,有时候设计程序时会想要针对不同的需求拥有多个流程,也就是所谓的多线程(Multi-thread)程序,这样的程序在执行的时候看起来像是并发

 

线程介绍

如果要设计一个龟兔赛跑游戏,赛程长度为10步,每经过1秒,乌龟会前进一部,兔子可能前进两步或睡觉,如果使用单线程可能会如下设计:

import random

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

print("龟兔赛跑开始...")
while tortoise_step < total_step and hare_step < total_step:
    tortoise_step += 1
    print(‘乌龟跑了 {} 步...‘.format(tortoise_step))
    sleeping = flags[int(random.random() * 10) % 2]
    if sleeping:
        print(‘兔子睡着了zzzzz‘)
    else:
        hare_step += 2
        print(‘兔子跑了 {} 步...‘.format(hare_step))

由于程序只有一个流程,因此只能将乌龟与兔子的行为混杂在这个流程中编写。为什么每次都先递增乌龟再递增兔子步数呢?这样对兔子很不公平啊!如果可以编写程序启动两个线程,一个是乌龟线程,一个是兔子线程,程序逻辑就会比较清楚。

在Python中,如果想在主线程以外独立设计线程,可以使用threading模块,例如可以在两个独立的函数中分别设计乌龟与兔子的线程。

import random, threading, time

def tortoise(total_step):
    step = 0
    while step < total_step:
        step += 1
        print(‘乌龟跑了 {} 步...‘.format(step))
        time.sleep(1)   #为了方便直观看到效果

def hare(total_step):
    step = 0
    flags = [True, False]
    while step < total_step:
        sleeping = flags[int(random.random() * 10) % 2]
        if sleeping:
            print(‘兔子睡着了zzzz‘)
            time.sleep(1)
        else:
            step += 2
            print(‘兔子跑了 {} 步...‘.format(step))
            time.sleep(1)

t = threading.Thread(target=tortoise, args=(10,))
h = threading.Thread(target=hare, args=(10,))

t.start()
h.start()

  

 

python并行并发

标签:als   单线程   style   独立   art   bsp   并发   需求   介绍   

原文地址:https://www.cnblogs.com/sellsa/p/8406328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!