【发布时间】:2022-11-12 09:52:46
【问题描述】:
试图为我当前的任务实现 ThreadPoolExecutor(那是我第一次使用它)我遇到了一个巨大的误解。 Semaphore 和 max_workers 有什么区别?就像我有一个任务池要做并且我希望我的代码一次只处理 3 个任务,我应该使用这两种方法中的哪一种?另一个目的是什么?
【问题讨论】:
试图为我当前的任务实现 ThreadPoolExecutor(那是我第一次使用它)我遇到了一个巨大的误解。 Semaphore 和 max_workers 有什么区别?就像我有一个任务池要做并且我希望我的代码一次只处理 3 个任务,我应该使用这两种方法中的哪一种?另一个目的是什么?
【问题讨论】:
信号: 释放的次数可以多于获得的次数,这会将其计数器提高到起始值之上。假设我们必须同时允许 10 个成员访问数据库,并且只允许 4 个成员访问网络连接。为了处理这种类型的需求,我们不能使用 Lock 和 RLock 概念,在这里我们应该使用 Semaphore。信号量可用于限制对容量有限的共享资源的访问。它是同步的高级部分。
max_workers:它是线程数或池大小。在您的情况下,您应该使用max_workers=3,这将确保一次生成 3 个线程并相应地完成该过程。
【讨论】: