2024-07-11
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
파이썬에서는queue
이 모듈은 다중 스레드 환경에서 데이터를 쉽게 공유할 수 있도록 동기화된 스레드로부터 안전한 대기열 클래스를 제공합니다.여기 용도가 있습니다queue.Queue
다음을 사용한 동시 프로그래밍 예제threading
대기열에 요소를 추가하고 대기열에서 요소를 제거하는 여러 스레드를 생성하는 모듈입니다.
import queue
import threading
import time
import random
# 定义一个工作函数,用于模拟生产者(向队列中添加数据)和消费者(从队列中取出数据)
def worker(q, job_type):
while True:
item = random.randint(1, 100) # 模拟生成数据
if job_type == 'producer':
q.put(item) # 生产者向队列中添加数据
print(f'{threading.current_thread().name} 生产了 {item}')
time.sleep(random.random()) # 模拟耗时操作
elif job_type == 'consumer':
item = q.get() # 消费者从队列中取出数据
q.task_done() # 表示队列中之前入队的一个任务已经完成
print(f'{threading.current_thread().name} 消费了 {item}')
time.sleep(random.random()) # 模拟耗时操作
# 创建一个队列
q = queue.Queue()
# 创建并启动生产者线程
for i in range(2): # 假设有两个生产者
t = threading.Thread(target=worker, args=(q, 'producer'), name=f'生产者-{i 1}')
t.daemon = True # 设置为守护线程,主线程结束时守护线程也会结束
t.start()
# 创建并启动消费者线程
for i in range(3): # 假设有三个消费者
t = threading.Thread(target=worker, args=(q, 'consumer'), name=f'消费者-{i 1}')
t.daemon = True # 设置为守护线程
t.start()
# 主线程等待所有任务完成(这里假设所有任务都会很快完成,实际情况中可能需要更复杂的同步机制)
q.join() # 等待队列中的所有项目都被处理
print("所有任务完成。")