python - Astroscrappy 无法在多处理 Jupyter 上工作

标签 python multithreading multiprocessing jupyter astropy

我这里有一些多处理代码,尝试同时运行多个 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/

相关文章:

python - 具有均值的 Pandas 数据透视表

python - 使用 numpy 数组或列表中的值更新数据框中的行

python - 如何在 Python 中创建 tmp 文件?

Java 线程 : pass values into the thread (probably race condition)

multithreading - 多核到单核仿真(核心分组)?

python - 为什么这个 SPARQL 查询缺少这么多结果?

ios - 新线程的问题

java - Unsafe.park 与 Object.wait

python - 将 flask 请求/应用程序上下文复制到另一个进程

python - 使用Sanic和Redis遇到麻烦