python并行并发

Posted sellsa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python并行并发相关的知识,希望对你有一定的参考价值。

并发

当我们执行.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并行并发的主要内容,如果未能解决你的问题,请参考以下文章

goroutine简介

Python 多线程爬虫

python之并发编程

EffectivePython并发及并行

[Python爬虫]高并发cnblogs博客备份工具(可扩展成并行)

什么是并发和并行?什么是进程和线程?进程和线程的区别