我这里有一些多处理代码,尝试同时运行多个 astroscrappy 进程。然而,当它实际上必须调用 astroscrappy 时,一切都会停止。我在 jupyter 笔记本中运行它。
def a_test(i, q):
import astroscrappy
print(1)
path = i
s = fits.getdata(path)
print(2)
print(2.5)
a = astroscrappy.detect_cosmics(s)
print(3)
q.put([a, i])
bundle = []
import multiprocessing as mp
queue = mp.Manager().Queue()
processes = []
for k, item in enumerate(paths):
processes.append(mp.Process(target=a_test, args=(item, queue)))
# Run processes
for p in processes:
p.start()
for p in processes:
bundle.append(queue.get())
它只会打印出 1, 2, 2.5,但不会打印出调用 astroscrappy 后出现的 3。有什么想法为什么它不起作用吗?
最佳答案
如果你在这里查看 astroscrappy 的 github:https://github.com/astropy/astroscrappy ,您将看到它已经使用了自己的多处理,称为 OpenMP。尝试进一步多处理这种函数将产生边际结果,甚至根本不会产生任何结果。您最好的选择是坚持现有的速度,这应该相当快。
关于python - Astroscrappy 无法在多处理 Jupyter 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74684287/