gpt4 book ai didi

python - ThreadPoolExecutor 可以工作,但 ProcessPoolExecutor 不能

转载 作者:行者123 更新时间:2023-12-01 01:29:17 24 4
gpt4 key购买 nike

使用 Python 3.7.1,这可以正常工作

with concurrent.futures.ThreadPoolExecutor(max_workers = 2) as executor:
print("Exec")
result = executor.map(lambda a: kernel(**a), params)

还在工作

for p in params:
kernel(**p)

kernel 返回一个字典并执行一些计算密集型操作。它不使用全局变量。 params 包含用户定义的类,但 pickle.dumps(params) 不返回错误并返回字节字符串。

文件本身是可导入的,即底部有 if __name__ == "__main__": main()

但是,如果我使用 ProcessPoolExecutor,执行就会停止。 Exec 被打印出来,仅此而已。 CPU 负载空闲。

我更喜欢 Process 模型来绕过 GIL。

谢谢!

最佳答案

回答我自己的问题时,旧的 Python 版本给了我一个提示:

Traceback (most recent call last):
File "/usr/lib/python3.5/multiprocessing/queues.py", line 241, in _feed
obj = ForkingPickler.dumps(obj)
File "/usr/lib/python3.5/multiprocessing/reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
AttributeError: Can't pickle local object 'main.<locals>.<lambda>'

所以我从映射中取出了 lambda 表达式,现在它也可以与 ProcessPoolExecutor 一起使用。

关于python - ThreadPoolExecutor 可以工作,但 ProcessPoolExecutor 不能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53049044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com