多个使用者线程从队列中获取同一项目

时间:2019-01-11 02:14:32

标签: python-3.x multithreading queue threadpool producer-consumer

我建立了一个具有多个使用者线程的生产者线程。我已经使用了一个队列,生产者将所有任务放在其中。然后,消费者线程使用get检索任务并执行它们。我一直遇到的问题是队列中的某些项目被多个使用者线程捕获。

在Automator类中,创建线程池,然后使用TaskThreadPool的add_task方法将所有任务放入队列。然后,TaskRunners开始将所有任务从队列中拉出并运行它们。在第一个周期完成之后,每个后续线程的每个使用者线程将同时抓取最后一个项目。因此,在这种情况下,当只应运行1个任务时,我会看到多个相同的任务正在运行。我尝试在执行_q.get之前在使用者线程中添加锁,但是仍然得到相同的结果。我该如何确保只有一个线程会抓取任务,并阻止另一个线程接触它。

Console Screenshot https://imgur.com/a/UN4K0Z7

<canvas id="myCanvas_one"></canvas>

1 个答案:

答案 0 :(得分:0)

The issue was my method that was handing items to the Queue. I added an additional check to stop unneeded items from being added to the queue.