Python 中的 SimpleQueue 与 Queue - 使用 SimpleQueue 的优势是什么?

Jos*_*one 9 python multithreading data-structures python-3.x

队列-一个队列同步类只是说,

SimpleQueue 允许的函数较少。

对于多线程应用程序,我需要非常基本的队列功能,它对使用 SimpleQueue 有任何帮助吗?

小智 10

python 文档指定简单队列不能使用跟踪功能(task_done、join)。这些可用于跟踪队列中的每个项目已被另一个进程/线程处理。示例代码:

import threading, queue

q = queue.Queue()

def worker():
    while True:
        item = q.get()
        print(f'Working on {item}')
        print(f'Finished {item}')
        q.task_done()

# turn-on the worker thread
threading.Thread(target=worker, daemon=True).start()

# send thirty task requests to the worker
for item in range(30):
    q.put(item)
print('All task requests sent\n', end='')

# block until all tasks are done
q.join()
print('All work completed')
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,主线程使用 join 等待另一个线程完成处理它发送的每个项目。同时,工作线程每次处理队列中的项目时都会发出“任务完成”信号。在这种情况下,“任务”是队列中的一个项目。

希望这可以帮助,

有关更多文档,请访问:https ://docs.python.org/3/library/queue.html


use*_*ica 5

queue.SimpleQueue处理的不仅仅是线程安全的并发。它处理可重入性-queue.SimpleQueue.put在可能会中断同一线程中的其他工作的不稳定情况下调用是安全的。例如,您可以安全地从__del__方法、weakref回调或signal模块信号处理程序中调用它。

如果需要,请使用queue.SimpleQueue.