asyncio标准库6 Threads & Subprocess

it2022-05-05  186

asyncio标准库6 Threads & Subprocess

Threads

import asyncio def compute_pi(digits): # implementation return 3.14 async def main(loop): digits = await loop.run_in_executor(None, compute_pi, 20000) print("pi: %s" % digits) loop = asyncio.get_event_loop() loop.run_until_complete(main(loop)) loop.close() # AbstractEventLoop.run_in_executor(executor, func, *args) # Executor (pool of threads or pool of processes)

Subprocess

Run a subprocess and read its output

import asyncio async def run_command(*args): # Create subprocess process = await asyncio.create_subprocess_exec( *args, # stdout must a pipe to be accessible as process.stdout stdout=asyncio.subprocess.PIPE) # Wait for the subprocess to finish stdout, stderr = await process.communicate() # Return stdout return stdout.decode().strip() loop = asyncio.get_event_loop() # Gather uname and date commands commands = asyncio.gather(run_command('uname'), run_command('date')) # Run the commands uname, date = loop.run_until_complete(commands) # Print a report print('uname: {}, date: {}'.format(uname, date)) loop.close()

Communicate with a subprocess using standard streams

import asyncio async def echo(msg): # Run an echo subprocess process = await asyncio.create_subprocess_exec( 'cat', # stdin must a pipe to be accessible as process.stdin stdin=asyncio.subprocess.PIPE, # stdout must a pipe to be accessible as process.stdout stdout=asyncio.subprocess.PIPE) # Write message print('Writing {!r} ...'.format(msg)) process.stdin.write(msg.encode() + b'\n') # Read reply data = await process.stdout.readline() reply = data.decode().strip() print('Received {!r}'.format(reply)) # Stop the subprocess process.terminate() code = await process.wait() print('Terminated with code {}'.format(code)) loop = asyncio.get_event_loop() loop.run_until_complete(echo('hello!')) loop.close() posted on 2018-03-19 16:34 北京涛子 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liujitao79/p/8602987.html


最新回复(0)