手记

【金秋打卡】第8天+多进程和线程编程

课程名称

全能软件测试工程师

课程章节

进程与线程编程

课程讲师

大周

课程内容

多进程编程

对于操作系统来说,一个任务就是一个进程。
Python创建进程:

  • 模块:multiprocessing
  • 方法:multiprocessing.Process()
import time
#导入多进程包
from multiprocessing import Process
import os

#子进程
def target_function():
    time.sleep(2)
    print("子进程的ID:{}".format(os.getpid()))

if __name__ == "__main__":
#主进程
    print("主进程ID:{}".format(os.getpid()))
    ps = []
    for i in range(10):
        p = Process(target=target_function)
        p.start()
        ps.append(p)
    # 让主进程等待子进程运行完成后再停止
    for p in ps:
        p.join()

多线程编程

以捡豆子比赛为例:
题目描述:
幼儿园举办捡豆子比赛,三个小朋友一组,将地上的 30 颗豆子捡起来,每个小朋友捡起一颗豆子,随机耗时1-3秒,请运用多线程相关的知识,编程实现三个小朋友捡豆子,并看看谁捡的豆子多

题解:

# 存储排名
rank = {}
# 豆子列表
BEAN = list(range(1, 31))

def pick_bean_method():
    pick_num = 0
    while len(BEAN) > 0:
        t = threading.current_thread()
        pick_bean = random.choice(BEAN)
        pick_num += 1
        BEAN.remove(pick_bean)
        print(f"{t.name}捡起了一颗豆子,总共捡起了{pick_num}颗豆子")
        # 捡豆子消耗的时间1-3秒
        pick_bean_consume_time = random.randint(1, 3)
        time.sleep(pick_bean_consume_time)
    rank[t.name] = pick_num
    print(f"{t.name}总共捡了{pick_num}颗豆子")

class Child_A(threading.Thread):
    def run(self):
        pick_bean_method()

class Child_B(threading.Thread):
    def run(self):
        pick_bean_method()
class Child_C(threading.Thread):
    def run(self):
        pick_bean_method()

child_a = Child_A (name="chile_a")
child_b = Child_B (name="chile_b")
child_c = Child_C (name="chile_c")

child_a.start ()
child_b.start ()
child_c.start ()

child_a.join ()
child_b.join ()
child_c.join ()
result = sorted(rank.items(),key=lambda x : x[1],reverse=True)
print(f"比赛结果为:{result}")

课程收获

该章节的知识点相信在日后的工作中会经常用到。

0人推荐
随时随地看视频
慕课网APP