• 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()
    
  • 相关阅读:
    一、模板的渲染
    十六、ajax上传图片 mvc
    十五、API请求接口-远程服务器返回错误: (400) 错误的请求错误
    九、操作(在结果中搜索+查询该表,单独几个字段查询,通过子查询方式查询)
    一、Vue分页实现
    【2019-10-29】除非你变成你自己
    【2019-10-28】美好在于细节心态
    【2019-10-27】理智是罗盘,感情是大风
    【2019-10-26】日积月累的小惠生者
    【2019-10-25】从错误和失败中获得经验
  • 原文地址:https://www.cnblogs.com/liujitao79/p/8602987.html
Copyright © 2020-2023  润新知