2012-08-31 48 views
1

我有一个脚本运行了很多并发线程(至少200)。每个线程都会进行一些相当复杂的评估,这可能会花费大量的时间。评估方法在C中实现,我无法更改它。我想限制每个线程的方法执行时间。请指教。如何限制python多线程环境中的函数执行时间?

+0

这个问题和你的[other one]有什么不同?(http://stackoverflow.com/questions/12222349/is-there-a-canonical-way-of-terminating-a-thread-in-python)? –

+0

@DavidRobinson这是另一项任务。我不想终止线程。它必须后处理部分评估结果。 –

+1

我以为你说过你不能修改评估。如果无法修改,它如何返回部分结果? –

回答

1

从我所了解的问题来看,使用多处理而不是多线程可能是一个很好的例子。多重处理将允许您使用系统上的所有可用资源 - 如果您不小心,可以使用一些资源。

线程实际上并不是并行运行,所以除非你正在做很多等待I/O或类似的事情,否则从一个单独的进程调用它会更有意义。您可以使用Python multiprocessing library从Python脚本中调用它,也可以使用用C语言编写的包装器并使用某种形式的interprocess communication。第二个选项将避免启动另一个Python实例来运行一些C代码的开销。

您可以调用time.sleep(或执行其他任务并检查系统时钟的已用时间),然后在期望的时间间隔后检查结果,允许任何尚未完成的进程在使用时继续运行的结果。或者,如果你不在意这一点,你可以发送一个信号来杀死这个过程。

+2

OP表示计算结果在C中。C扩展可以释放GIL,因此所有CPU内核都可以在不进行多处理的情况下使用 – jfs

+0

此外,您可能不希望一次在系统上运行200个进程,尤其是在CPU密集型。最好是批量运行它们,否则会引入额外的开销,因为它们都争用可用的CPU时间和内存。 – 2012-08-31 23:39:23

+0

@ J.F.Sebastion:这样做更有意义。不过,你不想一次运行200个这样的东西。 – 2012-08-31 23:52:16