繁体   English   中英

在不同的 CPU 上运行一个 function

[英]Run one function on different CPUs

我有一台机器有两个 CPU,每个 CPU 有不同数量的内核。 我的 python 代码中有一个 function。 如何在每个 CPU 上运行此 function?

在这种情况下,我需要运行两次 function 因为我有两个 CPU。

我想要这个是因为我想比较不同 CPU 的性能。 这可以是代码的一部分。 如果代码没有以正确的方式编写,请告诉我。

import multiprocessing

def my_function():
    print ("This Function needs high computation")
    # Add code of function

pool = multiprocessing.Pool()
jobs = []
for j in range(2): #how can I run function depends on the number of CPUs?
    p = multiprocessing.Process(target = my_function)
    jobs.append(p)
    p.start()

我已经阅读了很多帖子,但没有找到适合我的问题的答案。

concurrent package 以最佳方式处理资源分配,因此您不必指定任何特定的进程/线程 ID,无论如何都是特定于操作系统的。

如果您想使用多个进程或多个线程运行 function,您可以使用 class 为您完成它:

from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
from typing import Generator

class ConcurrentExecutor:
    @staticmethod
    def _concurrent_execution(executor, func, values):
        with executor() as ex:
            if isinstance(values, Generator):
                return list(ex.map(lambda args: func(*args), values))
            return list(ex.map(func, values))

    @staticmethod
    def concurrent_process_execution(func, values):
        return ConcurrentExecutor._concurrent_execution(
            ProcessPoolExecutor, func, values, verbose
        )

    @staticmethod
    def concurrent_thread_execution(func, values):
        return ConcurrentExecutor._concurrent_execution(
            ThreadPoolExecutor, func, values, verbose
        )

然后你可以用它执行任何 function,即使是 arguments。 如果它是单个参数函数:

from concurrency import ConcurrentExecutor as concex

# Single argument function that prints the input
def single_arg_func(arg):
    print(arg)

# Dummy list of 5 different input values
n_values = 5
arg_values = [x for x in range(n_values)]

# We want to run the function concurrently for each value in values
concex.concurrent_thread_execution(single_arg_func, arg_values)

或使用多个 arguments:

from concurrency import ConcurrentExecutor as concex

# Multi argument function that prints the input
def multi_arg_func(arg1, arg2):
    print(arg1, arg2)

# Dummy list of 5 different input values per argument
n_values = 5
arg1_values = [x for x in range(n_values)]
arg2_values = [2*x for x in range(n_values)]

# Create a generator of combinations of values for the 2 arguments
args_values = ((arg1_values[i], arg2_values[i]) for i in range(n_values))

# We want to run the function concurrently for each value combination
concex.concurrent_thread_execution(multi_arg_func, args_values)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM