如何在ThreadPool中等待任何线程?

我的应用无限获取新任务,我创建了一个类来处理所有这些传入任务:

class Executor:
    pool: ThreadPool

    def __init__(self, pool_size: int):
        self.pool = ThreadPool(pool_size)

    def start(self):
        while True:
            self.refresh_args()
            self.pool.map(self.handler, self.args)
            self.pool.join()

当然,此代码是错误的。问题是我不需要等待池中的所有任务。Executor必须尽快到池中添加新的任务,因为至少有一个线程完成的工作。这将是无限循环,并且池中的所有线程必须始终处于繁忙状态。

如何实现这种逻辑?还是我应该寻找另一种不用的方法ThreadPool如何在其他软件中实现?

JPery

您可以使用multiprocessing.Queue,通过将任务数作为Queue中最大元素数来传递。

当您将某些内容放入队列中时,该线程将一直等待直到它进入队列。同时,您可以像

while True:
    queue.get() # blocks if queue is empty

并将每个元素放在一个新线程中:

class Executor:
    pool: ThreadPool

    def __init__(self, pool_size: int):
        self.elements = multiprocessing.Queue(pool_size)

    def start(self):
        while True:
            self.refresh_args()
            element = self.elements.get() # blocks if queue is empty
            # put element in new thread
            # when task is finished, put new element in queue

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Rx中等待

来自分类Dev

如何在 JQuery 中等待

来自分类Dev

如何等待Threadpool的特定线程

来自分类Dev

如何在C#中等待主线程直到异步任务完成

来自分类Dev

如何在 C++ 中等待一组线程完成或其他事件

来自分类Dev

如何在ExecutePostProcessingAsync中等待异步方法

来自分类Dev

如何在elasticsearch中等待重新索引?

来自分类Dev

如何在Docker Compose中等待MSSQL?

来自分类Dev

如何在switchMap中等待Observable?

来自分类Dev

如何在iOS中等待NSXMLParser完成

来自分类Dev

如何在angularjs中等待服务结果

来自分类Dev

如何在数组迭代中等待?

来自分类Dev

如何在 TypeScript 中等待函数的返回?

来自分类Dev

如何在 tkinter 中等待多个按键?

来自分类Dev

在同步块中等待线程

来自分类Dev

在同步块中等待线程

来自分类Dev

如何在线程中等待,直到它接收到来自Google Api客户端的连接回调

来自分类Dev

如何等待任何工作线程的完成?

来自分类Dev

如何在c / c ++中等待孩子达到CPU超时?

来自分类Dev

如何在Node.js中等待子进程完成?

来自分类Dev

使用#all时如何在水豚中等待

来自分类Dev

如何在Python(2.7 +)中等待ENTER键按下?

来自分类Dev

如何在AngularJS的Run块中等待诺言?

来自分类Dev

如何在C#中等待异步工作

来自分类Dev

如何在F#中等待TaskAwaiter或ConfiguredTaskAwaitable

来自分类Dev

如何在pygame中等待一段时间?

来自分类Dev

如何在Go中等待命令行输入

来自分类Dev

如何在Powershell中等待并终止超时过程

来自分类Dev

我如何在类似未来的对象的__await__中等待?