2024-10-03 06:28:53 发布
网友
我有一个Module类,带有一个invoke()方法,可以执行一些IO绑定/等待。你知道吗
invoke()
我使用sched以不同的间隔运行所述类的多个实例,这种方式可能会使长时间运行的调用与另一个任务重叠。你知道吗
sched
sched模块是否可以派生不同的任务并以非阻塞方式处理它们,如果不是,哪个模块可以为多个重复的并发任务执行任务?你知道吗
我调查了sched,但找不到任何明确的答案。 我还研究了asyncio,这促使我给出了两个似乎不符合我需要的答案,分别是^{} (which seems cumbersome)和Tasks (which doesn't appear to allow to run multiple methods concurrently)。你知道吗
asyncio
学习下面的代码,Luciano Ramalho的Fluent Python的第18章是asyncio模块的优秀资源。另外,永远不要忘记文档本身在https://docs.python.org/3/library/asyncio.html
#!/usr/bin/env python3 # spinner_asyncio.py # credits: Example by Luciano Ramalho inspired by # Michele Simionato's multiprocessing example in the python-list: # https://mail.python.org/pipermail/python-list/2009-February/538048.html import asyncio import itertools import sys @asyncio.coroutine # <1> def spin(msg): write, flush = sys.stdout.write, sys.stdout.flush for char in itertools.cycle('|/-\\'): status = char + ' ' + msg write(status) flush() write('\x08' * len(status)) try: yield from asyncio.sleep(.1) # <3> except asyncio.CancelledError: # <4> break write(' ' * len(status) + '\x08' * len(status)) @asyncio.coroutine def slow_function(): # <5> # pretend waiting a long time for I/O, Non-blocking call! yield from asyncio.sleep(3) # <6> return 42 @asyncio.coroutine def supervisor(): # <7> spinner = asyncio.async(spin('thinking!')) # <8> print('spinner object:', spinner) # <9> result = yield from slow_function() # <10> spinner.cancel() # <11> return result def main(): loop = asyncio.get_event_loop() # <12> result = loop.run_until_complete(supervisor()) # <13> loop.close() print('Answer:', result) if __name__ == '__main__': main()
1:用于asyncio的协程应该用@asyn修饰 首席信息官协同程序. 这不是强制性的,但非常可取。你知道吗
3:使用收益率异步睡眠(.1)而不仅仅是时间。睡眠(.1),睡觉 不阻塞事件循环。你知道吗
4:如果asyncio.CanceledError错误在旋转醒来后升起,因为 已请求取消,因此退出循环。你知道吗
5:slow\ u函数是一个协程,使用yield from让事件循环 在这个协同程序假装通过睡眠进行I/O时继续。你知道吗
6:收益率异步睡眠(3) 表达式处理到 主循环,它将在睡眠延迟后恢复此协同进程。你知道吗
7:supervisor也是一个协程,所以它可以驱动慢的函数并产生收益 从。你知道吗
第八条:异步.async(…)计划spin协程运行,并将其包装到任务中 对象,该对象将立即返回
9:显示任务对象。输出看起来像Task pending coro=spin() 在旋转器上运行_异步.py:12. 你知道吗
10:驱动slow\u函数()。完成后,获取返回值。 同时,事件循环将继续运行,因为运行缓慢 最终使用异步睡眠(3) 把控制权交回主控台 循环。你知道吗
11:可以取消任务对象;这将引发asyncio.CanceledError错误以收益率 当前暂停协同程序的行。联队可能会赶上 例外和延迟,甚至拒绝取消。你知道吗
12:获取对事件循环的引用。你知道吗
13:驱动主管协程完成;协程的返回值 是此调用的返回值。你知道吗
学习下面的代码,Luciano Ramalho的Fluent Python的第18章是asyncio模块的优秀资源。另外,永远不要忘记文档本身在https://docs.python.org/3/library/asyncio.html
1:用于asyncio的协程应该用@asyn修饰 首席信息官协同程序. 这不是强制性的,但非常可取。你知道吗
3:使用收益率异步睡眠(.1)而不仅仅是时间。睡眠(.1),睡觉 不阻塞事件循环。你知道吗
4:如果asyncio.CanceledError错误在旋转醒来后升起,因为 已请求取消,因此退出循环。你知道吗
5:slow\ u函数是一个协程,使用yield from让事件循环 在这个协同程序假装通过睡眠进行I/O时继续。你知道吗
6:收益率异步睡眠(3) 表达式处理到 主循环,它将在睡眠延迟后恢复此协同进程。你知道吗
7:supervisor也是一个协程,所以它可以驱动慢的函数并产生收益 从。你知道吗
第八条:异步.async(…)计划spin协程运行,并将其包装到任务中 对象,该对象将立即返回
9:显示任务对象。输出看起来像Task pending coro=spin() 在旋转器上运行_异步.py:12. 你知道吗
10:驱动slow\u函数()。完成后,获取返回值。 同时,事件循环将继续运行,因为运行缓慢 最终使用异步睡眠(3) 把控制权交回主控台 循环。你知道吗
11:可以取消任务对象;这将引发asyncio.CanceledError错误以收益率 当前暂停协同程序的行。联队可能会赶上 例外和延迟,甚至拒绝取消。你知道吗
12:获取对事件循环的引用。你知道吗
13:驱动主管协程完成;协程的返回值 是此调用的返回值。你知道吗
相关问题 更多 >
编程相关推荐