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

sauutmhj  于 2023-11-20  发布在  Python
关注(0)|答案(3)|浏览(124)

queue — A synchronized queue class简单地说,
SimpleQueue允许的函数较少。
我需要一个多线程应用程序的基本队列功能,使用SimpleQueue会有帮助吗?

bqf10yzr

bqf10yzr1#

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

h6my8fg2

h6my8fg22#

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')

字符串
在上面的代码中,主线程使用join来等待其他线程完成处理它发送的每个项目。同时,工作线程每次处理队列中的项目时都会发出“task done”的信号。“task”在此上下文中是队列中的项目。
希望这对你有帮助,
更多文档请访问:https://docs.python.org/3/library/queue.html

t3psigkw

t3psigkw3#

SimpleQueue是无限制的,也就是说,它不能有maxsize,并且永远不会在put上阻塞。这可能导致无限的内存使用,程序无限期地停止,而不是失败。对于非平凡的程序,您应该首选具有适当maxsize的Queue。

相关问题