草庐IT

Asyncio库

全部标签

python - 带有 asyncio 的惰性迭代器(生成器)

我有这样一个阻塞的非异步代码:deff():definner():whileTrue:yieldread()returninner()使用此代码,调用者可以选择何时停止函数生成数据。如何将其更改为异步?此解决方案不起作用:asyncdeff():asyncdefinner():whileTrue:yieldawaitcoroutine_read()returninner()...因为yield不能在asyncdef函数中使用。如果我从inner()签名中删除async,我就不能再使用await。 最佳答案 更新:从Python3.6

python - 用 asyncio 听按键

有人可以提供一个代码示例,它使用asynio以非阻塞方式监听按键,并在每次点击时将键码放在控制台中吗?这不是关于某些图形工具包的问题 最佳答案 因此,AndreaCorbellini提供的链接是对问题的巧妙而彻底的解决方案,但也相当复杂。如果您只想提示您的用户输入一些输入(或模拟raw_input),我更愿意使用更简单的解决方案:importsysimportfunctoolsimportasyncioasaioclassPrompt:def__init__(self,loop=None):self.loop=looporaio.g

python - 每个 python 进程的 Asyncio 事件循环(aioprocessing,多个事件循环)

我有两个进程;一个主进程和一个子进程。主进程正在运行一个asyncio事件循环,并启动子进程。我想在子进程中启动另一个异步事件循环。我正在使用aioprocessing模块来启动子进程。子进程函数为:defsubprocess_code():loop=asyncio.get_event_loop()@asyncio.coroutinedeff():foriinrange(10):print(i)yieldfromasyncio.sleep(1)loop.run_until_complete(f())但是我得到一个错误:loop.run_until_complete(f())File"/

python - 遍历 asyncio.coroutine

我最近一直在研究asyncio,虽然我开始对它的工作原理有了直觉,但有些事情我还做不到。我不确定这是因为我的构造有误,还是我尝试做的事情没有意义。简而言之,我希望能够迭代生成的asyncio.coroutine。例如,我希望能够执行以下操作:@asyncio.coroutinedefcountdown(n):whilen>0:yieldfromasyncio.sleep(1)n=n-1yieldn@asyncio.coroutinedefdo_work():fornincountdown(5):print(n)loop.run_until_complete(do_work())但是,这

python - 是否可以只运行 asyncio 事件循环的一个步骤

我正在使用asyncio和tkinter开发一个简单的图形网络应用程序。我遇到了将asyncio事件循环与Tk的主循环相结合的问题。如果可能的话,我想在没有线程的情况下进行,因为这两个库(尤其是tkinter)都不是线程安全的。目前,我在asyncio协程中使用Tk.update,它只运行tk事件循环的一次迭代:@asyncio.coroutinedefrun_tk(tk,interval=0.1):try:whileTrue:tk.update()yieldfromasyncio.sleep(interval)exceptTclErrorase:if"applicationhasbe

python - asyncio 的 call_later raises 'generator' object is not callable with coroutine object

我有一些使用call_later使用Python3.4的asyncio制作的简单代码。代码应该打印,等待10秒,然后再次打印(但是在应该执行end()时引发TypeError,见下文):importasyncio@asyncio.coroutinedefbegin():print("Startingtowait.")asyncio.get_event_loop().call_later(10,end())@asyncio.coroutinedefend():print("completed")if__name__=="__main__":try:loop=asyncio.get_eve

python - 使用队列的 Asyncio 持久客户端协议(protocol)类

我正在努力了解Python3asyncio模块,特别是使用传输/协议(protocol)API。我想创建一个发布/订阅模式,并使用asyncio.Protocol类来创建我的客户端和服务器。目前,我已启动并运行服务器,并监听传入的客户端连接。客户端能够连接到服务器,发送消息并接收回复。我希望能够使TCP连接保持事件状态并维护一个允许我添加消息的队列。我试图找到一种使用低级API(传输/协议(protocol))来执行此操作的方法,但有限的在线asyncio文档/示例似乎都进入了高级API-使用流等。有人能够为我指明正确的实现方向?这是服务器代码:#!/usr/bin/envpython

python - 从 concurrent.futures 到 asyncio

concurrent.futures有两个问题:如何在pythonconcurrent.futures中中断time.sleep()?结论:time.sleep()不能中断。一种解决方案是:您可以围绕它编写一个循环并进行短暂的休眠。参见Howtobreaktime.sleep()inapythonconcurrent.futuresconcurrent.futures的个别超时?结论:个别超时需要由用户实现。例如:对于每次超时,您都可以调用wait()。参见Individualtimeoutsforconcurrent.futures问题asyncio是否解决了这些问题?

python - asyncio as_yielded 来自异步生成器

我希望能够从多个异步协程中产生结果。Asyncio的as_completed有点接近我正在寻找的东西(即我希望任何协程能够随时返回调用者然后继续),但这似乎只是允许常规协程返回一次。这是我目前所拥有的:importasyncioasyncdeftest(id_):print(f'{id_}sleeping')awaitasyncio.sleep(id_)returnid_asyncdeftest_gen(id_):count=0whileTrue:print(f'{id_}sleeping')awaitasyncio.sleep(id_)yieldid_count+=1ifcount>

python - 属性错误 : module 'asyncio' has no attribute 'create_task'

我正在尝试asyncio.create_task()但我正在处理这个错误:这是一个例子:importasyncioimporttimeasyncdefasync_say(delay,msg):awaitasyncio.sleep(delay)print(msg)asyncdefmain():task1=asyncio.create_task(async_say(4,'hello'))task2=asyncio.create_task(async_say(6,'world'))print(f"startedat{time.strftime('%X')}")awaittask1awaitt