- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
代码:
if __name__ == "__main__":
p = ProcessPoolExecutor()
p.submit(lambda x: print(x), "something") # doesn't work
p.submit(print, "something") # works fine
time.sleep(0.5)
为什么这是有道理的?
最佳答案
ProcessPoolExecutor
想要 pickle 函数,但由于 lambda 没有名称,因此无法找到它来 pickle。
例如:
from pickle import dumps
def fun(x):
print(x)
lmb = lambda x: print(x)
dumps(fun) # succeeds
dumps(lmb) # fails
所以,这会工作得很好:
import time
from concurrent.futures import ThreadPoolExecutor
def fun(x):
print(x)
if __name__ == "__main__":
p = ThreadPoolExecutor()
lmb = lambda x: print(x)
p.submit(lmb, "lambda") # works fine
p.submit(fun, "local function") # works fine
p.submit(print, "built-in function") # works fine
time.sleep(0.5)
但如果您将 ThreadPoolExecutor()
替换为 ProcessPoolExecutor()
,这将需要 pickle 函数,lambda 将停止工作。
from concurrent.futures import ProcessPoolExecutor
if __name__ == "__main__":
p = ProcessPoolExecutor()
lmb = lambda x: print(x)
future = p.submit(lmb, "lambda") # doesn't work
print(future.result())
这说明问题确实是在pickling的时候出现的,同时也说明了原因:
_pickle.PicklingError: Can't pickle <function <lambda> at 0x00000294E66B3E20>: attribute lookup <lambda> on __main__ failed
__main__
是主进程,它的命名空间中没有 lambda,因为 lambda 本身是无名的。将它分配给像 lmb
这样的变量不会改变这一点,因为 lambda 是从变量中取消引用的。其他两个函数固有地在 __main__
的命名空间中有一个名称,并且可以被 pickle。
请注意 __main__
与您要测试的名称相同:
if __name__ == "__main__":
关于python - ProcessPoolExecutor 无法执行我自己的功能,但执行打印工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74064151/
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
我是一名优秀的程序员,十分优秀!