【MK】Python全栈 阶段一:习题汇总 十:多线程编程

本文是关于Python全栈阶段一的多线程编程习题汇总,涵盖了单选题、多选题和编程题。内容涉及线程池的使用、线程锁、队列、进程通信以及异步编程的asyncio和gevent库的应用。通过实例讲解如何在Python中实现线程管理,包括线程池的执行方式和线程锁的实现。此外,还介绍了如何设计学生、课程和教师信息的管理系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

版权声明:本文为博主原创文章,未经博主允许不得转载。



一、单选题

1.下列关于 线程多线程 的说法不正确的是( )

  • A .线程(Thread)也叫轻量级进程,是操作系统进行运算调度的最小单位
  • B .一个线程可以创建和撤消另一个线程
  • C .线程之间不能共享内存
  • D .使用多线程来实现多任务并发执行比使用多进程的效率高 【√】

2.下列关于进程间通信的方法队列不正确的选项是( A

  • A .队列主要有Put方法和Delete方法 【put()、get()】
  • B .队列用于多个进程之间实现通信
  • C .Put方法主要是以插入数据到队列中
  • D .Get方法是从队列读取并且删除一个元素

二、多选题

1.下列关于使用线程池的原因正确的是()(选两项)

  • A .程序运行过程中线程数量越多越好
  • B .对于任务数量不断增加的程序,固定线程数量的线程池是有必要的
  • C .对于任务数量不断增加的程序,每有一个任务就生成一个线程,最终会导致量的失控
  • D .线程数量越多越好而且线程运行不占用资源

三、练习题

3.1 进程

一、按顺序执行:不同函数执行的进程号:进程号相同,代表在同一个进程中执行的

import time
import os

def  work_a():
    for i in range(10):
        print(i, 'a', os.getpid())     # 查看程序执行的进程号
        time.sleep(1)

def work_b():
    for i in range(10):
        print(i, 'b', os.getpid())
        time.sleep(1)

if __name__ == '__main__':
    start = time.time()
    work_a()
    work_b()
    print(time.time() - start)        # 用时:20秒
    print('parent pid is %s' % os.getpid())

二、创建进程:不同函数同时执行

import time
import os
import multiprocessing    # 进程模块

def  work_a():
    for i in range(10):
        print(i, 'a', os.getpid())     # 查看程序执行的进程号
        time.sleep(1)

def work_b():
    for i in range(10):
        print(i, 'b', os.getpid())
        time.sleep(1)

if __name__ == '__main__':
    start = time.time()
    # work_a 函数脱离了主进程,生成自己的单独子进程去执行,所以work_a和work_b之间执行相互不影响,所以用时缩短
    a_p = multiprocessing.Process(target=work_a)   # work_a:没有参数,所以args不用传了
    a_p.start()
    work_b()
    print(time.time() - start)              # 用时:10秒
    print('parent pid is %s' % os.getpid())

三、子进程与主进程互不影响

import time
import os
import multiprocessing    # 进程模块

def  work_a():
    for i in range(10):
        print(i, 'a', os.getpid())     # 查看程序执行的进程号
        time.sleep(1)

def work_b():
    for i in range(10):
        print(i, 'b', os.getpid())
        time.sleep(1)

if __name__ == '__main__':
    start = time.time()    # 主进程:代码1
    # 子进程1:work_a 函数脱离了主进程,生成自己的单独子进程去执行,所以work_a和work_b之间执行相互不影响,所以用时缩短
    a_p = multiprocessing.Process(target=work_a)   # work_a:没有参数,所以args不用传了
    # 子进程1执行
    a_p.start()
    # 子进程2:
    b_p = multiprocessing.Process(target=work_b)
    # 子进程2执行
    b_p.start()
    # 主进程:代码2
    print('用时:',time.time() - start)              # 用时:0.028秒
    # 主进程:代码3
    print('parent pid is %s' % os.getpid())

四、

import time
import os
import multiprocessing    # 进程模块

def  work_a():
    for i in range(10):
        print(i, 'a', os.getpid())     # 查看程序执行的进程号
        time.sleep(1)

def work_b():
    for i in range(10):
        print(i, 'b', os.getpid())
        time.sleep(1)

if __name__ == '__main__':
    start = time.time()    # 主进程:代码1
    
    # 子进程1:work_a 函数脱离了主进程,生成自己的单独子进程去执行,所以work_a和work_b之间执行相互不影响,所以用时缩短
    a_p = multiprocessing.Process(target=work_a)   # work_a:没有参数,所以args不用传了

    # 子进程2:
    b_p = multiprocessing.Process(target=work_b)

    # 多进程的执行
    for p in (a_p, b_p):
        p.start()

    # 主进程:代码2
    print('用时:',time.time() - start)              # 用时:0.028秒
    # 主进程:代码3
    print('parent pid is %s' % os.getpid())

五、先执行子进程,再执行主进程:join() 函数

import time
import os
import multiprocessing    # 进程模块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InitialHeart2021

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值