Я пытаюсь запустить подпроцесс из ноутбука Jupyter, который требует asyncio. Я перевел это на этот базовый c пример, который иллюстрирует мою проблему.
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
что аналогично вызову start1 непосредственно из блокнота jupyter.
, когда я создаю процесс с
targert=start2
, процесс выполняется с кодом выхода 0, что указывает на отсутствие ошибки, но в очередь ничего не добавляется.