标签:python-asyncio

  • 等待条件变量超时:未及时重新获得锁 - python

    时间:2020-9-3

    我有一个名为asyncio.Condition的cond。我希望等待,但只能等待很久,然后放弃。由于asyncio.Condition.wait不会超时,因此无法直接完成。 The docs指出应使用asyncio.wait_for来包装并提供超时: 超时后,可以使用asyncio.wait_for()函数取消任务。 因此,我们得出以下解决方案: async […]

  • 如何同时使用异步模块调用nameko服务 - python

    时间:2020-9-3

    我写这样的异步程序。永久运行循环启动4事件同时发生。每个事件将运行rpc服务。在nameko服务中,我使用time.sleep(10)实现该服务。 我很困惑为什么服务每10秒完成一次。我认为服务应同时完成。如何让工作同时完成? def start_loop(loop): asyncio.set_event_loop(loop) loop.run_foreve […]

  • 最大化并行请求数(aiohttp) - python

    时间:2020-9-1

    tl; dr:如何最大限度地增加可以并行发送的http请求的数量? 我正在使用aiohttp库从多个URL获取数据。我正在测试其性能,并且发现该过程中的某个地方存在瓶颈,一次运行更多的URL毫无帮助。 我正在使用此代码: import asyncio import aiohttp async def fetch(url, session): headers […]

  • 有没有一种非阻塞的方式来检查asyncio子进程是否处于活动状态? - python

    时间:2020-8-26

    使用asyncio.create_subprocess_exec时,将返回asyncio.subprocess.process。 documentation指示不存在poll或is_alive类型的方法。似乎wait或communicate提供了查看进程是否正在运行的唯一方法,但是它们阻止了调用,并且asyncio版本的communication没有超时选项 […]

  • 如何正确处理Python的`asyncio.gather`中已取消的任务 - python

    时间:2020-8-26

    所以现在3.8已经发布了,所以我要在asyncio模块上另辟径。但是,当尝试正常关闭事件循环时,我得到了意外的结果。具体来说,我正在监听SIGINT,取消正在运行的Task,收集这些Task,然后使用.stop()进行事件循环。我知道Task在取消时会引发CancelledError,它将传播并结束对asyncio.gather的调用,除非根据documen […]

  • 我什么时候应该在常规线程上使用asyncio,为什么?它可以提高性能吗? - python

    时间:2020-8-26

    我对Python中的多线程有基本的了解,甚至对asyncio也有较基本的了解。 我目前正在编写一个基于Curses的小型程序(最终将使用完整的GUI,但这是另一个故事),该程序处理主线程中的UI和用户IO,然后有两个其他守护程序线程(每个线程都有自己的守护程序)排队/工人从队列中得到东西的方法): 一个watcher线程,监视是否发生基于时间的和有条件的(例 […]

  • 如何将Celery与asyncio结合? - python

    时间:2020-8-25

    如何创建使芹菜任务看起来像asyncio.Task的包装器?还是有更好的方法将Celery与asyncio集成? @ asksol,Celery的创建者said this:: 使用Celery作为异步I / O框架之上的分布式层是很常见的(提示:将CPU绑定的任务路由到prefork worker意味着它们不会阻塞事件循环)。 但是我找不到任何专门针对asy […]

  • 异步两个循环用于不同的I / O任务? - python

    时间:2020-8-19

    我正在使用Python3 Asyncio模块创建负载平衡应用程序。我有两项繁重的IO任务: 一个SNMP轮询模块,它确定可能的最佳服务器 一个“类似代理”的模块,用于将请求平衡到所选服务器。 这两个进程将永远运行,彼此独立,不应被另一个进程阻塞。 我不能使用1个事件循环,因为它们会互相阻塞,有什么办法可以使2个事件循环,还是我必须使用多线程/处理? 我尝试使 […]

  • 如何在异步服务器中实现超时? - python

    时间:2020-8-19

    下面是一个简单的回显服务器。但是,如果客户端在10秒钟内未发送任何内容,我想关闭连接。 import asyncio async def process(reader: asyncio.StreamReader, writer: asyncio.StreamWriter): print("awaiting for data") line […]

  • 通过参数传递异步循环或使用默认异步循环 - python

    时间:2020-8-17

    我在我的应用程序中使用asyncio,我有点困惑将事件循环作为参数传递。 使用事件循环编写函数/方法时,有三种可能性: 将异步事件循环作为参数 传递 不要在事件循环中使用参数,而应使用asyncio.get_event_loop() 使其可选,以将事件循环作为参数传递。如果未通过,请使用asyncio.get_event_loop() 似乎大多数情况下都使用 […]