我有很多任务,我想一次执行几个。正常的解决方案是线程池。但是,我的任务需要只有某些线程拥有的资源。所以我不能只将任务分配给任何旧线程;线程必须拥有任务所需的资源。
似乎应该有一个并发模式,但我似乎找不到它。我在 Python 2 中通过多处理实现了这一点,所以这些术语的答案会很好,但是通用的解决方案很好。在我的情况下,“线程”实际上是独立的操作系统进程,资源是网络连接(不,它不是服务器,所以 (e)poll/select 不会有帮助)。一般来说,一个线程/进程可以拥有多个资源。
这是一个幼稚的解决方案:将任务放在工作队列中,然后将我的线程池放在上面。让每个线程检查“我可以执行此任务吗?” 如果是,就去做;如果不是,则将其放回队列中。但是,如果每个任务只能由 N 个线程中的一个来完成,那么我正在做大约 2N 个昂贵的、浪费的对共享队列的访问,只是为了获得一个工作单元。
这是我目前的想法:每个资源都有一个共享的工作队列。将任务分配到匹配队列。每个线程检查它可以处理的队列。
想法?