将所有参数存储为元组数组。
该示例表示,通常调用函数为:
def mainImage(fragCoord: vec2, iResolution: vec3, iTime: float) -> vec3:
而是传递一个元组并解压缩参数:
def mainImage(package_iter) -> vec3:
fragCoord = package_iter[0]
iResolution = package_iter[1]
iTime = package_iter[2]
预先使用循环构建元组:
package_iter = []
iResolution = vec3(nx, ny, 1)
for j in range((ny-1), -1, -1):
for i in range(0, nx, 1):
fragCoord: vec2 = vec2(i, j)
time_elapsed_seconds = 10
package_iter.append((fragCoord, iResolution, time_elapsed_seconds))
然后通过传递元组数组来执行所有using map:
array_rgb_values = []
with concurrent.futures.ProcessPoolExecutor() as executor:
for val in executor.map(mainImage, package_iter):
fragColor = val
ir = clip(int(255* fragColor.r), 0, 255)
ig = clip(int(255* fragColor.g), 0, 255)
ib = clip(int(255* fragColor.b), 0, 255)
array_rgb_values.append((ir, ig, ib))
我知道Python有*和**用于开箱,但我还没有尝试过。
使用高级库并发期货也比使用低级多处理库更好。