【问题标题】:how to utilize all core of cpu in linux for python code execution如何利用linux中所有cpu核心执行python代码
【发布时间】:2020-07-04 19:43:23
【问题描述】:

我正在执行一些pandasNumPy 操作,在windows 中我可以看到CPU 的所有内核都在运行,但在Linux 环境中,一切都在1 个内核 上运行。

我想使用所有核心,所以要快速执行操作。

例如,

def a():
    #some operations
    ..... 

我只想使用所有内核执行此功能一次。因为当它只使用一个内核时,它在 Linux 中大约需要 6 个小时,而在窗口中只需要 2 个小时。

我在 windows 中看到 numexpr 将默认核心设置为 4。

有什么方法可以在 Linux 中通过代码做同样的事情吗?

【问题讨论】:

    标签: python-3.x multiprocessing cpu-cores numexpr


    【解决方案1】:

    使用concurrent.future 模块进行并行执行。它会为你完成工作:

    concurrent.futures 模块为异步执行可调用对象提供高级接口。

    可以使用线程执行异步执行,使用 ThreadPoolExecutor,或使用 ProcessPoolExecutor 执行单独的进程。两者都实现了相同的接口,由抽象 Executor 类定义。

    import concurrent.futures
    with ThreadPoolExecutor(max_workers=psutil.cpu_count()) as executor:
        future = executor.submit(a(), args)
        print(future.result())
    

    submit(fn, *args, **kwargs) 安排可调用对象 fn 以 fn(*args **kwargs) 执行,并返回一个代表可调用对象执行的 Future 对象。

    使用psutil.cpu_count() 获取逻辑核心数,以调度最大工作人员和利用 cpu 核心。

    【讨论】:

    • 谢谢@adam 但它不起作用,一切都在 1 个核心上进行..
    • @NaveenRishishwar - 发布代码的关键部分。我们必须看到它。请附上相关代码。
    • 我做不到你可以假设 def a 包含很多 pandas 和颠簸的操作。
    猜你喜欢
    • 2016-04-10
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2017-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多