如何将python asyncio与线程结合在一起?

fxstein

我已经使用Python asyncio和aiohttp成功构建了一个RESTful微服务,该服务可侦听POST事件以收集来自各种供料器的实时事件。

然后,它构建一个内存结构,以将事件的最后24小时缓存在嵌套的defaultdict / deque结构中。

现在,我想定期检查该结构到磁盘的位置,最好使用pickle。

由于内存结构可以大于100MB,因此我希望避免在检查点结构所需的时间上占用传入事件处理时间。

我宁愿为该结构创建快照副本(例如,Deepcopy),然后花点时间将其写入磁盘并按预设的时间间隔重复执行。

我一直在寻找有关如何组合线程的示例(并且线程是否是为此的最佳解决方案?)和异步用于此目的,但是找不到对我有用的东西。

非常感谢任何入门的指点!

损害

使用以下方法将方法委派给线程或子流程非常简单BaseEventLoop.run_in_executor

import asyncio
import time
from concurrent.futures import ProcessPoolExecutor

def cpu_bound_operation(x):
    time.sleep(x) # This is some operation that is CPU-bound

@asyncio.coroutine
def main():
    # Run cpu_bound_operation in the ProcessPoolExecutor
    # This will make your coroutine block, but won't block
    # the event loop; other coroutines can run in meantime.
    yield from loop.run_in_executor(p, cpu_bound_operation, 5)


loop = asyncio.get_event_loop()
p = ProcessPoolExecutor(2) # Create a ProcessPool with 2 processes
loop.run_until_complete(main())

至于使用aProcessPoolExecutor还是ThreadPoolExecutor,这很难说。腌制一个大物体肯定会消耗一些CPU周期,最初您会认为这ProcessPoolExecutor可行的方法。但是,将100MB对象传递到Process池中的a将需要在主进程中腌制该实例,通过IPC将字节发送到子进程,在子进程中将其取消腌制,然后再次将其腌制,以便可以将其写入磁盘。鉴于此,我的猜测是,酸洗/去酸洗的开销将足够大ThreadPoolExecutor,即使使用GIL会对性能造成负面影响,您也最好使用

也就是说,两种方法的测试都非常简单,并且可以确定找出来,所以您也可以这样做。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将吸气剂结合在一起

来自分类Dev

如何将手势和动画结合在一起

来自分类Dev

如何将事件侦听器与事件的“询问”结合在一起?

来自分类Dev

如何将原位转换和复制转换结合在一起?

来自分类Dev

如何将镜头和函子结合在一起?

来自分类Dev

如何将LINQ组和排序与父子表结合在一起?

来自分类Dev

如何将DAO和GUI与MVC结合在一起

来自分类Dev

如何将.toggleClass()与.appendTo()结合在一起?

来自分类Dev

如何将Axios调用循环与等待功能结合在一起?

来自分类Dev

如何将这两个查询结合在一起?(MySQL)

来自分类Dev

如何将RequireJS路径和require-css结合在一起?

来自分类Dev

如何将数据框总结为与ID结合在一起的列表?

来自分类Dev

如何将Bash的流程替换与HERE文档结合在一起?

来自分类Dev

如何将DataTables与其他匹配器结合在一起?

来自分类Dev

R:如何将几个数据集结合在一起

来自分类Dev

如何将NavigationDrawerPageSlidingTabStrip与StickyListHeaders库结合在一起?

来自分类Dev

如何将typedef的结构与实例创建结合在一起?

来自分类Dev

如何将列与R中的条件结合在一起?

来自分类Dev

如何将文字信息与系统信息结合在一起?

来自分类Dev

如何将“ IF FOR批处理”与“ FOR DELIMS批处理”结合在一起?

来自分类Dev

如何将分组的输入与对齐的表单结合在一起?

来自分类Dev

如何将JavaScript代码和html代码结合在一起?

来自分类Dev

如何将时基轮询与等待的任务结合在一起

来自分类Dev

如何将5个以上的PDF与imagemagick转换结合在一起?

来自分类Dev

如何使用python将头文件与数据文件结合在一起?

来自分类Dev

如何将自举轮播与侧边栏菜单结合在一起?

来自分类Dev

如何将我的vba与进度条结合在一起?

来自分类Dev

如何将我的表单ID变量与.val()声明结合在一起?

来自分类Dev

如何将不同的数组值与通用键结合在一起

Related 相关文章

  1. 1

    将吸气剂结合在一起

  2. 2

    如何将手势和动画结合在一起

  3. 3

    如何将事件侦听器与事件的“询问”结合在一起?

  4. 4

    如何将原位转换和复制转换结合在一起?

  5. 5

    如何将镜头和函子结合在一起?

  6. 6

    如何将LINQ组和排序与父子表结合在一起?

  7. 7

    如何将DAO和GUI与MVC结合在一起

  8. 8

    如何将.toggleClass()与.appendTo()结合在一起?

  9. 9

    如何将Axios调用循环与等待功能结合在一起?

  10. 10

    如何将这两个查询结合在一起?(MySQL)

  11. 11

    如何将RequireJS路径和require-css结合在一起?

  12. 12

    如何将数据框总结为与ID结合在一起的列表?

  13. 13

    如何将Bash的流程替换与HERE文档结合在一起?

  14. 14

    如何将DataTables与其他匹配器结合在一起?

  15. 15

    R:如何将几个数据集结合在一起

  16. 16

    如何将NavigationDrawerPageSlidingTabStrip与StickyListHeaders库结合在一起?

  17. 17

    如何将typedef的结构与实例创建结合在一起?

  18. 18

    如何将列与R中的条件结合在一起?

  19. 19

    如何将文字信息与系统信息结合在一起?

  20. 20

    如何将“ IF FOR批处理”与“ FOR DELIMS批处理”结合在一起?

  21. 21

    如何将分组的输入与对齐的表单结合在一起?

  22. 22

    如何将JavaScript代码和html代码结合在一起?

  23. 23

    如何将时基轮询与等待的任务结合在一起

  24. 24

    如何将5个以上的PDF与imagemagick转换结合在一起?

  25. 25

    如何使用python将头文件与数据文件结合在一起?

  26. 26

    如何将自举轮播与侧边栏菜单结合在一起?

  27. 27

    如何将我的vba与进度条结合在一起?

  28. 28

    如何将我的表单ID变量与.val()声明结合在一起?

  29. 29

    如何将不同的数组值与通用键结合在一起

热门标签

归档