面试题答案
一键面试Queue模块使用场景
- 多线程/多进程协作:在多线程或多进程编程中,用于线程/进程间传递数据,避免数据竞争。例如,一个生产者线程生成数据,多个消费者线程从队列中获取数据进行处理。
- 任务调度:可以作为任务队列,将任务按顺序放入队列,由工作线程或进程依次处理。
- 异步处理:当需要异步处理一些任务,而不阻塞主线程时,可使用队列暂存任务,之后由其他线程处理。
使用Queue模块实现简单任务队列示例
import queue
import threading
# 模拟数据处理任务
def process_task(task):
print(f"Processing task: {task}")
# 消费者线程函数
def consumer(task_queue):
while True:
try:
task = task_queue.get(timeout=1)
process_task(task)
task_queue.task_done()
except queue.Empty:
break
if __name__ == "__main__":
task_queue = queue.Queue()
tasks = [1, 2, 3, 4, 5]
# 将任务放入队列
for task in tasks:
task_queue.put(task)
# 创建并启动消费者线程
consumer_thread = threading.Thread(target=consumer, args=(task_queue,))
consumer_thread.start()
# 等待所有任务完成
task_queue.join()
print("All tasks processed.")
在上述代码中:
- 首先定义了
process_task
函数模拟实际的数据处理任务。 consumer
函数是消费者线程,它不断从队列中获取任务并处理,直到队列为空。- 在
main
部分,创建了任务队列并将任务放入队列,然后启动消费者线程,最后使用task_queue.join()
等待所有任务处理完毕。