Κοινή χρήση τεχνολογίας

Η λειτουργική μονάδα python `queue` παρέχει σύγχρονες, ασφαλείς για νήμα κλάσεις ουράς

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Στην Python,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("所有任务完成。")