如何解决在不同的 CPU 上运行一个函数
我有一台机器有两个 CPU,每个 CPU 有不同数量的内核。我的 python 代码中有一个函数。如何在每个 CPU 上运行此函数?
在这种情况下,我需要运行两次函数,因为我有两个 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
包以最佳方式处理资源分配,因此您不必指定任何特定的进程/线程 ID,无论如何都是特定于操作系统的。
如果您想使用多个进程或多个线程运行一个函数,您可以使用一个类来为您执行此操作:
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,values,verbose
)
@staticmethod
def concurrent_thread_execution(func,values):
return ConcurrentExecutor._concurrent_execution(
ThreadPoolExecutor,verbose
)
然后你可以用它执行任何函数,即使是带参数的。如果它是单个参数函数:
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)
或者有多个参数:
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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。