我编写了一个脚本,它遍历某个目录中的文件,启动一个线程并对文件执行某些操作。由于这些操作耗时长、成本高,因此我将线程数限制为比运行该程序的给定机器上的 cpu 数少一。然后,它不断检查事件线程的数量,如果有空闲容量,则启动另一个线程。对于返回机器上 cpu 数量的函数,我使用 this .
ncpus = detectCPUs()
for (dirpath, dirnames, filenames) in os.walk(path_to_root):
for filename in filenames:
while True:
if threading.activeCount() < ncpus - 1:
MyThread(dirpath, filename).start()
break
else:
time.sleep(100)
我无法避免这样的感觉:threading
库或 python 中的其他地方有一些函数可以自动为我执行此操作,而无需我密切关注线程和 CPU 的数量。有人知道吗?或者指出经验丰富的退伍军人将如何做到这一点?
一些限制。我使用的共享计算机只安装了 python 2.5,并且我没有 root 权限来安装东西。因此,多处理
或需要 python 2.6 或更高版本的优秀库是不可能的。
最佳答案
也许线程池实现就是您想要的?
http://code.activestate.com/recipes/577187/
它看起来像这样:
pool = ThreadPool(num_threads)
for obj in objects:
pool.add_task(obj.do_stuff, [arg1, arg2])
pool.wait_completion()
关于python - python 中限制线程的规范/标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983128/