b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c 异步编程_.net 异步编程_task异步编程

电脑杂谈  发布时间:2019-08-23 16:01:57  来源:网络整理

.net 异步编程_task异步编程_c 异步编程

只有进入 PENDING 状态下的任务才可以取消c 异步编程,FINISHED状态不可以取消。。。。。。。

使用 KeyboardInterrupt 来接收终止事件

c 异步编程_.net 异步编程_task异步编程

import asyncio
async def work(id, t):
    print('Working...')
    await asyncio.sleep(t)
    print('Work {} done'.format(id))
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    coroutines = [work(i, i) for i in range(1, 4)]
    try:
        loop.run_until_complete(asyncio.gather(*coroutines))
    except KeyboardInterrupt:  # 接收终端事件,结束事件循环中全部的pending任务
        loop.stop()
    finally:
        loop.close()

在任务执行过程中 ctrl+c,直接更改还未完成的任务

c 异步编程_.net 异步编程_task异步编程

Working...
Working...
Working...
Work 1 done
Work 2 done
^C

通过 asyncio.Task.all_tasks 获取全部任务并获取它们的状况

task异步编程_c 异步编程_.net 异步编程

import asyncio
async def work(id, t):
    print('Working...')
    await asyncio.sleep(t)
    print('Work {} done'.format(id))
if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    coroutines = [work(i, i) for i in range(1, 4)]
    try:
        loop.run_until_complete(asyncio.gather(*coroutines))
    except KeyboardInterrupt:
        tasks = asyncio.Task.all_tasks()
        for i in tasks:
            print('取消任务:{}'.format(i._state))
            print('取消状态:{}'.format(i.cancel()))
    finally:
        loop.close()

效果如下c 异步编程,在执行过程中输入 ctrl+c

.net 异步编程_task异步编程_c 异步编程

Working...
Working...
Working...
Work 1 done
^C取消任务:PENDING
取消状态:True
取消任务:FINISHED
取消状态:False
取消任务:PENDING
取消状态:True

asyncio的eventloop提供了一系列函数来处理异步函数执行的难题

下面是一个整合的反例

import asyncio
import functools
def normal_func(name: str):
    print('[normal_func] triggered by {}'.format(name))
def loop_stop(loop: asyncio.AbstractEventLoop, future: asyncio.Future):
    loop.stop()
async def work(t: int, name: str):
    print('[{}] start'.format(name))
    await asyncio.sleep(t)
    print('[{}] after {}s stop'.format(name, t))
if __name__ == '__main__':
    # asyncio.ensure_future
    # loop.create_Task
    # loop.run_until_complete
    loop = asyncio.get_event_loop()
    start = loop.time()
    tasks = asyncio.gather(work(1, '1'), work(4, '2'))
    loop.call_soon(normal_func, 'call_soon')
    loop.call_later(2, normal_func, 'call_later')
    loop.call_at(start + 3, normal_func, 'call_at')
    tasks.add_done_callback(functools.partial(loop_stop, loop))
    loop.run_forever()  # 无限运行事件循环,直至 loop.stop 停止
    loop.close()  # 关闭事件循环,只有 loop 处于停止状态才会执行

结果如下


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-120305-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 瓦妮莎帕拉迪斯
        瓦妮莎帕拉迪斯

        追求的不就是一种不平凡嘛

      热点图片
      拼命载入中...