- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设置了一个函数来接收多个关键字参数:
def process(image, folder, param1, param2, param3):
do_things
return
我有几个 param1/2/3 的组合,我想以完全排列的方式遍历它们(即 1,4,7 然后 1,4,8 直到 3,6,9):
param1 = [1,2,3]
param2 = [4,5,6]
param3 = [7,8,9]
但是,image
和 folder
保持不变,所以我设置了一个部分,并将其包装在 ProcessPoolExecutor 映射函数中:
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(process,
image=image,
folder=folder,
),
...
)
当我有 1 个函数参数,并从 process()
中删除 param2
和 param3
时,以下单个可迭代工作:
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(process,
image=image,
folder=folder,
),
[q for q in param1]
)
但是我如何为 executor.map 传递多个可迭代对象呢?
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(process,
image=image,
folder=folder,
),
[q for q in param1],
[q for q in param2],
[q for q in param3],
)
无论是否指定函数关键字名称,但无论哪种情况,我都会得到一个 TypeError: process() got multiple values for argument 'image'
还试过:
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(process,
image=image,
folder=folder,
),
[i for i in product(param1, param2, param3)]
)
上面给出了错误:BrokenProcessPool:进程池中的进程在未来运行或挂起时突然终止。
我希望 executor.map 遍历多个可迭代对象并将它们传递给正确的函数关键字。
from functools import partial
from concurrent import futures
from itertools import product
def new_fn(a, b, c):
print(a, b, c)
return (a, b, c)
a_static = 'Hi: '
b_it = ['b1', 'b2', 'b3']
c_it = ['c1', 'c2', 'c3']
p = [i for i in product(b_it, c_it)]
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(new_fn, a=a_static), p
)
data
最佳答案
您永远不会确切地说您想如何遍历 param1/2/3,所以这只是一个猜测。
您可以通过稍微更改 process()
函数的调用顺序并使用内置的 zip()
来做我想做的事。 unzip 数据的功能(如文档中所述)。
请注意内置的 partial()
函数是如何被使用的——正如您所尝试的那样,尝试将位置参数的关键字参数传递给它是不正确的。
我还添加了 if __name__ == '__main__':
使 Python 多处理代码(也)在 Windows 上运行所需的守卫。
import concurrent.futures as futures
from functools import partial
def process(image, folder, params):
param1, param2, param3 = params
print(f'param1={param1}, param2={param2}, param3={param3}')
if __name__ == '__main__':
image = 'image'
folder = 'folder'
param1 = [1, 2, 3]
param2 = [4, 5, 6]
param3 = [7, 8, 9]
with futures.ProcessPoolExecutor(max_workers=4) as executor:
data = executor.map(
partial(process, image, folder),
zip(*zip(param1, param2, param3))
)
for _ in data:
...
输出:
param1=1, param2=2, param3=3
param1=4, param2=5, param3=6
param1=7, param2=8, param3=9
关于python - 使用部分方法将多个可迭代参数传递给 ProcessPoolExecutor.map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61672749/
python ProcessPoolExecutor 在命令行中工作,但添加到函数后不运行 它是这样工作的 from concurrent import futures def multi_proce
如果父进程因任何原因终止,有没有办法使 concurrent.futures.ProcessPoolExecutor 中的进程终止? 一些细节:我在处理大量数据的作业中使用 ProcessPoolEx
这是我关于 stackoverflow 的第一个问题。我基本上能够在这里找到我需要知道的东西。顺便说一句,非常感谢。 但是。如果我尝试终止我的 ProcessPoolExecutor,它只会在生成的整
我有一个代码,它从 gstorage 下载文件,将它们转储到 json,然后将该 json 转为 csv,然后转为 parquet,最后上传到 aws s3(不要问为什么我不是写它的人)。 我从我的日
ESPNP 播放器免费 class ESPNPlayerFree: def __init__(self, player_id, match_id, match_id_team): ... 团队列表1:
在本文档 ( https://pymotw.com/3/concurrent.futures/ ) 中说: “ProcessPoolExecutor 的工作方式与 ThreadPoolExecutor
我正在创建一个多处理程序来处理多个批处理,但我的日志记录无法将批处理记录到日志文件中,只会记录根 log.info,如何设置日志记录以正确打印到日志文件? 日志只会打印这样一行"INFO:root:t
我正在尝试使用一个单独的进程通过并发 future 流式传输数据。然而,另一方面,有时对方会停止数据馈送。但只要我重新启动这个 threadable 然后它就会再次工作。所以我设计了这样的东西,以便能
设置 我设置了一个函数来接收多个关键字参数: def process(image, folder, param1, param2, param3): do_things return
from concurrent.futures import ProcessPoolExecutor import os import time def parInnerLoop(item):
python 3.6.6 这是代码: import asyncio import time from concurrent.futures import ProcessPoolExecutor exe
我是一般并行化的新手,特别是 concurrent.futures。我想对我的脚本进行基准测试并比较使用线程和进程之间的差异,但我发现我什至无法运行它,因为在使用 ProcessPoolExecuto
代码: if __name__ == "__main__": p = ProcessPoolExecutor() p.submit(lambda x: print(x), "somet
代码: if __name__ == "__main__": p = ProcessPoolExecutor() p.submit(lambda x: print(x), "somet
我想在多进程环境中记录到单个文件。我可以得到 sample code从 python 日志记录手册开始工作。但是当我替换为 ProcessPoolExecutor 时,它不起作用。 # work
我正在尝试使用新的 Tornado queue对象以及 concurrent.futures允许我的网络服务器将 CPU 密集型任务传递给其他进程。我想访问从 concurrent.futures 模
我有一个 python 函数正在调用我无法控制或更新的 C 库。不幸的是,C 库存在间歇性错误,有时会挂起。为了防止我的应用程序也挂起,我尝试隔离 ThreadPoolExecutor 或 Proce
我最近开始使用 Python 的多线程和多处理功能。 我尝试编写代码,使用生产者/消费者方法从 JSON 日志文件中读取 block ,将这些 block 作为事件写入队列,然后启动一组将从该队列中轮
我有一大堆必须以某种方式处理的元素。我知道可以通过以下方式使用多处理过程来完成: pr1 = Process(calculation_function, (args, )) pr1.start() p
if __name__ == '__main__': MATCH_ID = str(doc_ref2.id) MATCH_ID_TEAM = doc_ref3.id with
我是一名优秀的程序员,十分优秀!