赞
踩
系统知识
• cpu时间片(抽象概念)
• 对于单核cpu同一时刻只能有一个任务运行。
线程是操作系统最小的调度单位, 是一串指令的集合
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位
• 真正在cpu上运行的是线程
• 线程共享内存空间;进程的内存是独立的
• 一个线程只能属于一个进程,而一个进程可以有多个线程,
但至少有一个线程
• 资源分配给进程,同一进程的所有线程共享该进程的所有资
源。进程的资源是独立的
• 同一个进程的线程之间可以直接交流;两个进程想通信,必
须通过一个中间代理来实现
■ 功能
• threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。
■ threading模块提供的常用类:
• Thread:创建线程
• Lock/RLock:互斥锁
*
Thread构造方法*:
• 构造方法: Thread(group=None, target=None, name=None, args=(), kwargs={})
• group: 线程组,目前还没有实现,库引用中提示必须是None;
• target: 要执行的方法;
• name: 线程名;
• args/kwargs: 要传入方法的参数
Thread实例方法
• t.name:获取或设置线程的名称
• t.getName()/setName(name): 获取/设置线程名。
• t.is_alive()、t.isAlive():判断线程是否为激活状态。返回线程是否在运行。正在运行指启动后、终
止前。
• t.ident :获取线程的标识符。线程标识符是一个非零整数,只有在调用了start()方法之后该属性才
有效,否则它只返回None
• t.run() :线程被cpu调度后自动执行线程对象的run方法
• t.start(): 线程准备就绪,等待CPU调度,start会自动调用t.run()
threading——Thread
■ Thread实例方法
• t.join([timeout]): 阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的timeout
(可选参数)。
• t.setDaemon(bool): 设置是后台线程(默认前台线程(False))。(在start之前设置)
• 如果是后台线程,主线程执行过程中,后台线程也在进行,主线程执行完毕后,后台线程不论
成功与否,主线程和后台线程均停止
• 如果是前台线程,主线程执行过程中,前台线程也在进行,主线程执行完毕后,等待前台线程
也执行完成后,程序停止
• t.isDaemon:判断是否为后台线程
假设有一个列表 numbers 包含了 1000 个整数,你需要编写一个程序来计算列表中所有整数的平方和。请使用多线程的方式来加快计算速度。 提示: 将列表 numbers 分成 n 个子列表,每个子列表包含大致相等数量的整数。 创建 n 个线程,每个线程负责计算一个子列表中整数的平方和。 主线程等待所有子线程执行完成,并将每个子线程计算得到的平方和累加起来。 最终结果即为平方和,通过将各个子线程计算得到的平方和相加得到。 下面是示例答案的代码: import threading def calculate_square_sum(numbers): """计算子列表中整数的平方和""" return sum(x*x for x in numbers) if __name__ == "__main__": numbers = [i for i in range(1, 1001)] # 包含了 1000 个整数的列表 num_threads = 4 # 要创建的线程数量 chunk_size = len(numbers) // num_threads chunks = [numbers[i:i+chunk_size] for i in range(0, len(numbers), chunk_size)] threads = [] # 存储线程对象的列表 results = [] # 存储子线程计算结果的列表 # 创建子线程并启动 for chunk in chunks: thread = threading.Thread(target=lambda x: results.append(calculate_square_sum(x)), args=(chunk,)) threads.append(thread) thread.start() # 等待所有线程执行完成 for thread in threads: thread.join() # 计算总和 total_sum = sum(results) # 打印结果 print("平方和:", total_sum) 在这段代码中,我们首先将包含了 1000 个整数的列表 numbers 分成了 4 个子列表(根据线程数量)。然后,我们创建了 4 个子线程,每个子线程负责计算一个子列表中整数的平方和,并将计算结果存入 results 列表。最后,我们等待所有子线程执行完成,并对 results 列表中的结果进行求和。 请注意,这里的示例中将列表均分为子列表,但在实际应用中,你可能需要根据具体情况进行更合理的划分子列表的方式。 运行这段代码后,你会看到输出的平方和。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。