测试面试Python——线程进程协程代码实现(面试频率超高)

一、前言

文章不仅是给大家看的,也是我秋招+社招迟到的复盘,大家加油吖~

二、什么是进程、线程、协程?

2.1 进程(Process)

定义:就是任务,是计算机系统进行资源分配和调度的基本单位。

例如:打开一个word文件就是启动一个word进程。

特点:独立数据空间,进程间不共享数据、系统调度。

2.2 线程(Thread)

定义:进程内的子任务。

例如:word中可进行编辑、拼写检查和打印等子任务。

特点:执行程序的最小单位,进程内线程间共享资源、系统调度。

2.3 协程

定义:程序员调度,分解一个线程成为多个"微线程"。

特点:通过代码层面控制程序使用协程方式运行,高并发需求,可使用协程。

三、如何用Python实现进程、线程、协程?

3.1 进程代码实现

目的:输出一条语句,同时包含一个进程的id。

#encoding:utf-8
from multiprocessing import Process#引入process模块实现多进程
#输出一条语句,同时包含一个进程的id
def foo(i):
    print("This is Process",i)
for i in range(s):#初始化5个进程,每个进程都把def语句打印出来
    P = Process(target=foo,args=(i,))
    P.start( )#启动进程

进程输出结果

{'This is Process',0}
{'This is Process',1}
{'This is Process',2}
{'This is Process',3}
{'This is Process',4}

3.2 线程代码实现

目的:试下多线程,输出一条语句,告诉你是第几个线程。

#encoding:utf-8
import threading
def show(i):
    print('This is Thread',i)
for i in range(5):
    t = threading.Thread(targer = show,args=(i,))
    t.start( )#启动线程

线程输出结果

('This is Thread',0)
('This is Thread',1)
('This is Thread',2)
('This is Thread',3)
('This is Thread',4)

3.3 协程代码实现

#encoding:utf-8
import geven
def foo():
    print("start_foo")
    gevent.sleep(2)
    print("end_foo")

def bar():
    print("start_bar")
    gevent.sleep(0)
    print("end_bar")

#foo()
#bar()

#把foo()和bar()两个待测方法添加进去执行
    gevent.joinall([
        gevent.spawn(foo),
        gevent.spawn(bar),
    ])

协程输出结果

start_foo
start_bar
end_bar#因foo()设置sleep为2,耗时比bar长,因此bar()先执行结束
end_foo

四、写在最后

进程线程面试遇到的可能性还是很大的,我秋招和社招都有遇到过,希望大家多学习一下。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值