首页 > 解决方案 > 多处理、异步和 jupyter

问题描述

我正在尝试从需要 asyncio 的 jupyter 笔记本运行子进程。我已将其提炼为说明我的问题的基本示例。

from multiprocessing import Process, Queue
import asyncio

async def test(q, val):

    await asyncio.sleep(1)
    q.put(val)


def start1(q, val):
    loop = asyncio.get_event_loop()
    loop.run_until_complete(test(q, val))

def start2(q, val):
    asyncio.ensure_future(test(q, val))

q = Queue()
process = Process(
    target=start,
    args=(q, 123)
)
process.start()

当我创建流程时

target=start1

我明白了

RuntimeError: This event loop is already running

这就像我直接从 jupyter notebook 调用 start1 一样。

当我创建流程时

targert=start2

该进程以 exitcode 0 执行,表示没有错误,但没有任何内容添加到队列中。

标签: pythonpython-3.xjupyter-notebookmultiprocessingpython-asyncio

解决方案


推荐阅读