版权声明:本文为博主原创文章,未经博主允许不得转载。
文章目录
一、单选题
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