记住并发异步python函数调用

aiomemoizeconcurrent的Python项目详细描述


全同型CircleCITest Coverage

记住并发的Asyncio Python协同程序调用。这提供了短暂的记忆:对于任何给定的参数集,缓存只持续一次调用的长度。

安装

pip install aiomemoizeconcurrent

用法

对于其参数是散列的协程,可以通过将其传递给memoize_concurrent来创建memoized版本。对此版本的任何具有相同参数的并发调用都将只导致原始协程的single运行

例如,创建一个协程的3个并发调用,其中2个具有相同的参数

importasynciofromaiomemoizeconcurrentimportmemoize_concurrentasyncdefmain():memoized_coro=memoize_concurrent(coro)results=awaitasyncio.gather(*[memoized_coro('a'),memoized_coro('a'),memoized_coro('b'),])print(results)awaitmemoized_coro('a')asyncdefcoro(value):print('Inside coro',value)awaitasyncio.sleep(1)returnvalueloop=asyncio.get_event_loop()loop.run_until_complete(main())loop.close()

只运行coro两次,如输出所示

Inside coro a
Inside coro b
['a', 'a', 'b']

用例

这可用于记录调用api的函数,特别是在

  • 您希望有许多并发调用;
  • 相同的并发调用是等幂的;
  • 有足够多的这样的调用是相同的,以证明这样一个缓存层的合理性

它还可用于避免多个任务访问共享资源时出现并发边缘情况/竞争条件。例如,多个任务可能需要动态创建共享的udp套接字。为了确保此动态生成不被同一地址的多个任务同时调用,可以用memoize_concurrent包装它

函数memoize_concurrent既可用于协同过程,也可用于返回未来的函数

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
保存一段xml是一个新的xml解析器Java   java如何使用断言测试单链表。assertEquals()   java如何将多个选定图像从Gallery复制到Android中的另一个文件夹   重新触发异常时调用序列中的java差异   swing如何在Java中的GridLayout面板的特定单元格中添加标签?   java在更新引用实体之后,有没有办法更新其他实体中的列?   java如何在两个实体之间使用foreach   java方法add(Component)不适用于参数   Apache Tiles和Spring MVC中的java全局异常页面   java kSoap2发送集合   Java存储对象与直接调用其方法的性能对比?   java如何访问selenium中的nowrap元素   使用endpointsframeworktools生成OpenAPI文档时发生java错误   西/东方向的java JLabel不会显示在BorderLayout中   java ActiveMQ Spring客户端:如何更改处理器池?   java不能取消对void的引用;尝试使用生成器模式   javajavax。websocketclient:如何将大型二进制数据从clientendpoint发送到serverendpoint   运行Java代理时Java代理问题   如何将Web应用程序连接到Java/ABAP应用程序   javajackson处理问题