• 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'
    ')
       
        # 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()
    
  • 相关阅读:
    c# udp局域网通信
    wpf 空白汉字占位符
    直角三角形知道变长求夹角
    windowsphone 的IsolatedStorageSettings存储类型
    WPFUIElement的Background的问题
    oracle外表
    oracle安装
    数据库ddl,dml,dcl
    OLTP与OLAP的介绍
    四种XML解析方式详解
  • 原文地址:https://www.cnblogs.com/liujitao79/p/8602987.html
Copyright © 2020-2023  润新知