Python - 线程队列/出队的最佳实践
我有一个队列,最多可以放4个对象,这些对象是运行网络服务请求的线程。线程的部分没问题。我看过很多教程,讲的是如何使用消费者和生产者线程来往队列里填充和取出对象。
我想问的是关于消费者的部分。在这些教程和Python文档中,我发现从队列中取出对象的唯一方法是:
while len(requltArray) < amountOfThreads:
thread = q.get(True)
thread.join()
想象一下,q.get(True)取出了一个有问题的网络服务请求的线程。这个线程需要等urllib超时结束才能继续。这样我的消费者就会被阻塞几秒钟。因为我的队列最多只能放4个线程,而其他3个线程可能已经结束了,所以我就浪费了时间,直到消费者可以继续取出对象(而生产者也能往队列里填东西)。
有没有什么办法或者常见的设计模式可以避免这种浪费时间的情况呢?
谢谢你的帮助。
1 个回答
0
也许你可以使用条件。
想象一下,你想把一个新的线程放进你的队列里,但队列已经满了。这时候你可以使用 wait() 来等待条件对象(伪代码):
condition.acquire()
while not queue.has_free_place():
condition.wait()
add_new_thread_to_queue()
condition.release()
然后在你排队的线程执行完毕后,你可以在代码的最后加上类似下面的代码:
condition.acquire()
remove_myself_from_queue()
condition.notify()
condition.release()