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

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



一、单选题

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

InitialHeart2021

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值