在尝试使用启用了RuntimeError的记录器处理程序从dask.delayed函数进行日志记录时,我将获得一个enqueue。
下面是一个最小可重现性的例子
import sys, dask
from loguru import logger
logger.add(sys.stderr, enqueue=True)
@dask.delayed
def log():
logger.info("Logging!")
dask.compute(*[log() for i in range(10)], scheduler="processes")它会产生以下错误:
RuntimeError: SimpleQueue objects should only be shared between processes through inheritance发布于 2022-09-14 04:43:16
解决办法很简单。从delayed函数中导入记录器:
In [1]: import sys, dask
...: from loguru import logger
...:
...: logger.add(sys.stderr, enqueue=True)
...:
...: @dask.delayed
...: def log():
...: from loguru import logger
...: logger.info("Logging!")
...:
...: dask.compute(*[log() for i in range(10)], scheduler="processes")
2022-09-13 21:42:36.001 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.001 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.001 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.001 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.002 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.002 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.004 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.004 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.004 | INFO | __main__:log:9 - Logging!
2022-09-13 21:42:36.004 | INFO | __main__:log:9 - Logging!
Out[1]: (None, None, None, None, None, None, None, None, None, None)https://stackoverflow.com/questions/73711615
复制相似问题