python - 如何在 Python 库函数中使用并行化?
问题描述
我定义了一个函数 FactorTest.py,它接收一个变量 x 并a():return x+1, b():return x+2, c():return x+3 and d():return x+4
以并行方式调用函数。
然后我将FactorTest.py
另一个程序作为库函数导入。当我调用FactorTest
并设置 x = 0 时,它会得到返回[x+1,x+2,x+3,x+4]
,即[1,2,3,4]
.
有什么办法可以实现吗?重点是并行化的方式。
解决方案
那是一种不明显的事情。如果您真的要进行计算(这是受 CPU 限制的操作),您可以从并发方法(异步和线程 - 因为 Python 线程是有限的GIL)中受益。这意味着,唯一接近它的是使用进程,你可以看看multiprocessing.Pool或ProcessPoolExecutor
这种方法的缺点是产生进程的成本。它有资源开销,这意味着您可以考虑为每个进程执行一些操作,而不是为每个计算运行一个专用进程。
import functools
import concurrent.futures
def action(x, y):
return x + y
def factor(x, sum_range=4):
result = []
callback = functools.partial(action, x)
with concurrent.futures.ProcessPoolExecutor() as executor:
for num in executor.map(callback, range(1, sum_range+1)):
result.append(num)
return result
print(factor(2))
# > [3, 4, 5, 6]
推荐阅读
- python - 函数中的 Python Base64 解码失败错误
- laravel - laravel 6:在 null 上调用成员函数 store()
- mysql - 为什么 Mysql 解释使用索引来跟踪 SQL 语句而不是范围
- python - 为什么 range 只在 python 中打印出(开始,结束)索引项(对我来说),而 quit() 对我也不起作用
- python - Python - 我有一个由函数(键和值)组成的字典,如何只获取值的 arg(而不是函数的结果)
- swift - 如何修复实例成员不能在类型 segmentedControl 上使用
- azure - AzCopy 同步命令失败
- python - PySpark 在日期之前/之后添加列
- c# - C# 没有从其他形式获取变量
- sql - 当 TempVars 存储对象时,为什么我得到一个 TempVars Only Store Data not Objects