是否可以根据每次运行的内容向 ThreadPoolExecutor 提交函数调用?

时间:2021-08-01 18:32:49

标签: python multithreading queue

假设我们必须在多线程设置中使用不同的参数运行三个不同的函数(func_afunc_bfunc_c)。 func_a 有 20 组参数,func_b 有 15 组参数,func_c 有 10 组参数,这意味着我们必须运行 func_a 20 次,func_b 15 次和 func_c 10 次。

函数可以同时运行,但不能同时运行两个对同一个函数的调用;例如我们不能有两个线程同时运行 func_a,尽管参数不同。

(想象一下有速率限制的 API,它只允许您对每个 API 的每个 IP 地址进行一次调用。)

假设所有函数的所有参数都保存在字典中:

function_calls = {
    'func_a':{ {'n':12, 'm':'k'}, ..., {'n':23, 'm':'j'} },
    'func_b':{ {'n':22, 'm':'l'}, ..., {'n':57, 'm':'z'} },
    'func_c':{ {'n':35, 'm':'v'}, ..., {'n':79, 'm':'x'} }
}

有没有办法运行一个由三个工人组成的线程池,他们每次只执行每个函数参数对中的一个?

显然,如果“每个函数每次只有一个线程”的限制不存在,您可以简单地使用任何现有的多线程方法(例如使用 ThreadPoolExecutor),但这是仅当线程池中当前没有对同一函数的其他调用正在运行时,才应将函数调用提交给线程池的用例。

有没有办法强制执行这样的限制?例如,我们可以使用 Queue 吗?

0 个答案:

没有答案