线程:在T期

时间:2018-03-08 17:57:55

标签: python multithreading python-2.7 subprocess threadpool

目标 n 任务要在 t 期间完成(比如180秒),每项任务需要2秒才能完成。任务必须在 t 期间统一分配。

设置:我正在使用Mininet环境,它使用lightweight virtualization来运行Linux主机。在我的设置中,我有10个主机。每个任务都与主机(随机选择)相关联。

到目前为止,我已经完成了10个主机之间的任务(根据他们的关联),并在后台安排random_sleep(少于 t )无需等待他们完成。

$ sleep random_duration && do_task &

但是,当 n 很大(> 2000)时,这会导致超出最大用户进程数。

或者,我想到为每个主机创建一个线程并在前台逐个调度任务(在前一个完成后开始下一个)。但是,在这种方法中,我不能保证 n 任务可以在 t 中完成。

解决这个问题的可扩展方法是什么?

1 个答案:

答案 0 :(得分:0)

假设您可以某种方式跟踪正在运行的任务的数量,那么我会看到一个解决方案。访问或硬编码MAX_PROCESSES限制。将所有进程放入队列(或任何集合)。如果n < MAX_PROCESSES(剩余一些用于正常系统工作),那么您已经知道如何处理这项工作。

n过大的情况下,仍会计算调度间隔time_allowed * processor_count / n,但仅安排第一个MAX_PROCESSES * ratio任务,对于某些ratio&lt; 1.0。在处理器中平均分配它们。当流程完成时(可能是计划完成的一半完成),然后安排另一批任务,始终保持活动任务的数量略多于processor_count(在您的示例中为10),但比{{轻松得多1}}。

这会处理你的问题吗?