QUANTAXIS

Asyncio

2017-10-07  本文已影响42人  yutiansut

Asyncio

1. Base Event Loop

1.1 Run an event loop

1.1.1 AbstractEventLoop.run_forever()

会一直运行直到stop()方法触发

1.1.2 AbstractEventLoop.run_until_complete(future)

会一直运行直到Future运行结束,如果是一个协程对象,就会被ensure_future()来装饰.

会返回Future的结果,或者报错

1.1.3 AbstractEventLoop.is_running()

返回event_loop的运行状态

1.1.4 AbstractEventLoop.stop()[3.5.1新增]

会终止run_forever()

在一个合适的时机:

If stop() is called while run_forever() is running, this will run the current batch of callbacks and then exit. Note that callbacks scheduled by callbacks will not run in that case; they will run the next time run_forever() is called.Changed in version 3.5.1.

1.1.5 AbstractEventLoop.is_closed()

3.4.2新增方法 如果event loop被关闭了 返回True

1.1.6 AbstractEventLoop.close()

彻底关闭, 这个方法会清除掉executor,并且不会像stop一样在恰当时机关闭 而是直接关闭

不可逆

1.1.7 AbstractEventLoop.shutdown_asyncgens()[coroutine ]

3.6新增方法

try:    
    loop.run_forever()
finally:
    loop.run_until_complete(loop.shutdown_asyncgens()) 

1.2 Calls | 调用

大部分异步函数不接受多个参数,所以调用的时候 用functools.partial偏函数来装饰

1.2.1 AbstractEventLoop.call_soon(callback, *args)

这是一个先进先出的(按注册顺序)队列

返回asyncio.Handle() 用于控制callback

1.2.2 AbstractEventLoop.call_soon(callback, *args)

和1.2.1一样 只不过是线程安全的

1.3 Delayed calls | 延时调用

event loop有他内在的时钟来计算超时[不过 这个延时不能超过一天]

1.3.1 AbstractEventLoop.call_later(delay, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.2 AbstractEventLoop.call_at(when, callback, *args)

返回asyncio.Handle() 用于控制callback

1.3.3 AbstractEventLoop.time()

返回当前时间,是一个float值(这个是由eventloop的内部时钟给出的)

1.4 Futures

1.4.1 AbstractEventLoop.create_future()

创建asyncio.Future对象 这个是在asyncio里面创建Future的推荐方法 3.5.2新增方法

1.5. Tasks

1.5.1 AbstractEventLoop.create_task(coro)

设定协程对象的执行,用future包裹他,返回一个Task对象

第三方包的event_loop可能有他们自己定义的task,但是必须是Task类的子集

3.4.2新增的

1.5.2 AbstractEventLoop.set_task_factory(factory)

如果factory是None, 就会使用默认的

如果factory是可调用的,需要有一个(loop,coro)的签名[loop是当前运行的event_loop,coro是一个协程对象 这个可以调用的对象一定要返回一个asyncio.Future对象

3.4.4新增

1.5.3 AbstractEventLoop.get_task_factory()

返回当前的task_factory,如果是默认的task_factory类型,就会返回None

3.4.4新增

1.6 Creating connections

1.6.1 (coroutine) AbstractEventLoop.create_connection(protocol_factory, host=None, port=None, ssl=None, family=0, proto=0, flags=0,sock=None, local_addr=None, server_hostname=None)

1.6.2 (coroutine) AbstractEventLoop.create_datagram_endpoint(protocol_factory, local_addr=None, remote_addr=None, family=0, proto=0, flags=0, reuse_address=None, reuse_port=None, allow_broadcast=None, sock=None)

1.6.3 (coroutine) AbstractEventLoop.create_unix_connection(protocol_factory, path,ssl=None, sock=None, server_hostname=None)

1.7 Creating listening connections

1.7.1 coroutine AbstractEventLoop.create_server(protocol_factory, host=None, port=None,family=socket.AF_UNSPEC, flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None, reuse_address=None, reuse_port=None)

1.7.2 coroutine AbstractEventLoop.create_unix_server(protocol_factory, path=None,sock=None, backlog=100, ssl=None)

1.7.3 coroutine BaseEventLoop.connect_accepted_socket(protocol_factory, sock, ssl=None)

1.8 Watch file descriptors

1.8.1 AbstractEventLoop.add_reader(fd, callback, args)

1.8.2 AbstractEventLoop.remove_reader(fd)

1.8.3 AbstractEventLoop.add_writer(fd, callback, args)

1.8.4 AbstractEventLoop.remove_writer(fd)

2. Event loops

上一篇 下一篇

猜你喜欢

热点阅读