python - python 中限制线程的规范/标准方法

标签 python concurrency

我编写了一个脚本,它遍历某个目录中的文件,启动一个线程并对文件执行某些操作。由于这些操作耗时长、成本高,因此我将线程数限制为比运行该程序的给定机器上的 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/

相关文章:

python - 如何使用 graphene-file-upload 和 apollo-upload-client 将 graphql 中的文件上传到 Python 数据库并在前端使用react。

concurrency - 顺序一致但非静态一致的执行示例

memory-management - 确定障碍物(栅栏)的使用位置

java - java中AtomicMarkableReference的 "get"方法实现背后的原因是什么?

node.js - 如何在 Node Js 应用程序的多个实例之间同步对象

python - 在不安装 Python 的情况下,在 Cloudera 虚拟机上安全地拥有两个版本的 Python

python - 导入变量初始化

Python 类型提示 - 更好的 cast() 语法?

python - 将 csv 转换为字符串变量

Php - Insert Autoincrement Value - For Parent/Child Tables - 并发问题