def test_subprocess_print(): """printing from forked mp.Process""" with new_kernel() as km: iopub = km.iopub_channel _check_mp_mode(km, expected=False) flush_channels(km) np = 5 code = '\n'.join([ "from __future__ import print_function", "import multiprocessing as mp", "pool = [mp.Process(target=print, args=('hello', i,)) for i in range(%i)]" % np, "for p in pool: p.start()", "for p in pool: p.join()" ]) expected = '\n'.join([ "hello %s" % i for i in range(np) ]) + '\n' msg_id, content = execute(km=km, code=code) stdout, stderr = assemble_output(iopub) nt.assert_equal(stdout.count("hello"), np, stdout) for n in range(np): nt.assert_equal(stdout.count(str(n)), 1, stdout) nt.assert_equal(stderr, '') _check_mp_mode(km, expected=False) _check_mp_mode(km, expected=False, stream="stderr")
def test_subprocess_print(): """printing from forked mp.Process""" with new_kernel() as km: iopub = km.iopub_channel _check_mp_mode(km, expected=False) flush_channels(km) np = 5 code = '\n'.join([ "from __future__ import print_function", "import multiprocessing as mp", "pool = [mp.Process(target=print, args=('hello', i,)) for i in range(%i)]" % np, "for p in pool: p.start()", "for p in pool: p.join()" ]) expected = '\n'.join(["hello %s" % i for i in range(np)]) + '\n' msg_id, content = execute(km=km, code=code) stdout, stderr = assemble_output(iopub) nt.assert_equal(stdout.count("hello"), np, stdout) for n in range(np): nt.assert_equal(stdout.count(str(n)), 1, stdout) nt.assert_equal(stderr, '') _check_mp_mode(km, expected=False) _check_mp_mode(km, expected=False, stream="stderr")
def _check_mp_mode(km, expected=False, stream="stdout"): execute(km=km, code="import sys") flush_channels(km) msg_id, content = execute(km=km, code="print (sys.%s._check_mp_mode())" % stream) stdout, stderr = assemble_output(km.iopub_channel) nt.assert_equal(eval(stdout.strip()), expected)
def new_kernel(): """start a kernel in a subprocess, and wait for it to be ready Returns ------- kernel_manager: connected KernelManager instance """ KM = BlockingKernelManager() KM.start_kernel(stdout=PIPE, stderr=PIPE) KM.start_channels() # wait for kernel to be ready KM.shell_channel.execute("import sys") KM.shell_channel.get_msg(block=True, timeout=5) flush_channels(KM) try: yield KM finally: KM.stop_channels() KM.shutdown_kernel()