Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python队列,SimpleQueue,任务完成_Python_Queue_Python Multithreading - Fatal编程技术网

python队列,SimpleQueue,任务完成

python队列,SimpleQueue,任务完成,python,queue,python-multithreading,Python,Queue,Python Multithreading,使用queue.queue()时是否必须调用task\u done() 如果我不需要任务计数,我是否应该使用queue.SimpleQueue(为了更好的性能)? 我不确定SimpleQueue是否是线程安全的?因为我看到put()实现没有获得锁 当我在Queue()实现中播种时,如果我不调用task_done(),则会有一个递增的计数器,并且由于我的程序正在长时间运行,不调用task_done()会导致内存泄漏吗?因为数数太多了 除非使用Queue.join()函数,否则不必调用task

使用
queue.queue()
时是否必须调用
task\u done()

  • 如果我不需要任务计数,我是否应该使用
    queue.SimpleQueue
    (为了更好的性能)? 我不确定
    SimpleQueue
    是否是线程安全的?因为我看到
    put()
    实现没有获得锁

  • 当我在
    Queue()
    实现中播种时,如果我不调用task_done(),则会有一个递增的计数器,并且由于我的程序正在长时间运行,不调用task_done()会导致内存泄漏吗?因为数数太多了

  • 除非使用
    Queue.join()
    函数,否则不必调用
    task\u done()
  • Queue.join()
    阻塞,直到获取并处理队列中的所有项目

    每当将项目添加到队列中时,未完成任务的计数就会增加。每当使用者线程调用
    task\u done()
    以指示已检索到该项,并且该项上的所有工作都已完成时,计数就会下降。当未完成任务的计数降至零时,
    join()
    取消阻止

  • 是的,如果您不需要跟踪功能(
    task\u done
    join
    ),您可以使用
    queue.SimpleQueue
    而不是
    queue.queue
    作为更轻量级的版本
    SimpleQueue
    是线程安全的,而且更安全,正如
  • 它处理可重入性-在可能中断同一线程中的其他工作的不稳定情况下,调用
    queue.SimpleQueue.put
    是安全的。例如,您可以通过
    \uu del\uu
    方法、
    weakref
    回调或信号模块信号处理程序安全地调用它

    注:至少这适用于其С实施

  • 据我所知,
    queue.queue
    使用
    int
    作为
    put
    的计数器。我的拙见是,这个计数器可能会占用太多的内存,这更多的是理论上的,而不是实践上的

  • 另一件事
    SimpleQueue
    缺少的是大小限制。如果您需要背压(并且几乎每个队列都需要背压),
    SimpleQueue
    将是一个等待发生的内存泄漏。