我有一个脚本运行了很多并发线程(至少200)。每个线程都会进行一些相当复杂的评估,这可能会花费大量的时间。评估方法在C中实现,我无法更改它。我想限制每个线程的方法执行时间。请指教。如何限制python多线程环境中的函数执行时间?
回答
从我所了解的问题来看,使用多处理而不是多线程可能是一个很好的例子。多重处理将允许您使用系统上的所有可用资源 - 如果您不小心,可以使用一些资源。
线程实际上并不是并行运行,所以除非你正在做很多等待I/O或类似的事情,否则从一个单独的进程调用它会更有意义。您可以使用Python multiprocessing library从Python脚本中调用它,也可以使用用C语言编写的包装器并使用某种形式的interprocess communication。第二个选项将避免启动另一个Python实例来运行一些C代码的开销。
您可以调用time.sleep(或执行其他任务并检查系统时钟的已用时间),然后在期望的时间间隔后检查结果,允许任何尚未完成的进程在使用时继续运行的结果。或者,如果你不在意这一点,你可以发送一个信号来杀死这个过程。
OP表示计算结果在C中。C扩展可以释放GIL,因此所有CPU内核都可以在不进行多处理的情况下使用 – jfs
此外,您可能不希望一次在系统上运行200个进程,尤其是在CPU密集型。最好是批量运行它们,否则会引入额外的开销,因为它们都争用可用的CPU时间和内存。 – 2012-08-31 23:39:23
@ J.F.Sebastion:这样做更有意义。不过,你不想一次运行200个这样的东西。 – 2012-08-31 23:52:16
- 1. 在多线程环境中测量线程的执行时间
- 2. 多线程环境中的mkdirs()函数
- 3. 执行Java函数的时间限制
- 4. 如何在javascript中限制函数的执行时间?
- 5. 如何在c sharp中限制函数的执行时间?
- 6. 限制函数执行时间
- 7. Python:线程执行时间
- 8. 线程环境块如何在地址空间限制之上?
- 9. 在多线程环境中限制连接组的速率
- 10. 限制执行时间在java中的线程样本
- 11. Python:无限循环中的多线程
- 12. 在多线程环境中并行执行每个子任务
- 13. 使用Python中的多线程测量执行时间
- 14. scraperwiki如何限制执行时间?
- 15. 限制计时器线程执行时间
- 16. python程序的执行次数限制
- 17. 如何限制C#foreach循环执行最大时间限制的迭代
- 18. 多线程python程序的执行时间
- 19. 测量多线程的执行时间
- 20. 在没有线程的情况下限制Java执行时间
- 21. 可以在多处理器环境中执行Java线程吗?
- 22. 线程数与线程数限制和执行过程参数
- 23. Python不能在多线程环境
- 24. PHP - 执行时间限制
- 25. didReceiveNotificationRequest:withContentHandler - 执行时间限制?
- 26. 在Python中控制线程执行时间
- 27. 如何关闭多线程环境中的线程java
- 28. 如何在Python中自动测量函数的执行时间
- 29. 如何在python中执行一段时间的函数?
- 30. Python在多线程时节省执行时间
这个问题和你的[other one]有什么不同?(http://stackoverflow.com/questions/12222349/is-there-a-canonical-way-of-terminating-a-thread-in-python)? –
@DavidRobinson这是另一项任务。我不想终止线程。它必须后处理部分评估结果。 –
我以为你说过你不能修改评估。如果无法修改,它如何返回部分结果? –