草庐IT

python - 为什么要显式调用 asyncio.StreamWriter.drain?

来自doc:write(data)Writedatatothestream.Thismethodisnotsubjecttoflowcontrol.Callstowrite()shouldbefollowedbydrain().coroutinedrain()Waituntilitisappropriatetoresumewritingtothestream.Example:writer.write(data)awaitwriter.drain()据我了解,每次调用write时都需要调用drain。如果不是我猜,write会阻塞循环线程那write为什么不是自动调用的协程呢?为什么一个

python - 创建在协程完成时产生协程结果的生成器

目前,我有一个低效的同步生成器,它按顺序发出许多HTTP请求并产生结果。我想使用asyncio和aiohttp并行化请求,从而加速这个生成器,但我想将它保留为普通生成器(而不是PEP525asyncgenerator),以便调用它的非异步代码不需要修改。如何创建这样的生成器? 最佳答案 asyncio.as_completed()采用可迭代的协程或future,并按照输入future完成的顺序返回可迭代的future。通常,您会遍历其结果并await来自async函数的成员...importasyncioasyncdeffirst(

python - 将 asyncio.Queue 用于生产者-消费者流程

我对如何将asyncio.Queue用于特定的生产者-消费者模式感到困惑,在这种模式下,生产者和消费者同时独立运作。首先,考虑这个例子,它紧跟docsforasyncio.Queue中的例子。:importasyncioimportrandomimporttimeasyncdefworker(name,queue):whileTrue:sleep_for=awaitqueue.get()awaitasyncio.sleep(sleep_for)queue.task_done()print(f'{name}hassleptfor{sleep_for:0.2f}seconds')async

python - 同步 sleep 进入asyncio协程

我有一个协程如下:asyncdefdownload():downloader=DataManager()downloader.download()DataManager.download()方法如下所示:defdownload(self):start_multiple_docker_containers()whileTrue:check_containers_statuses()sleep(N)#synchronoussleepfromtimemodule这是一个好的做法吗?如果不是,我如何在download()中使用asyncio.sleep?或者这样的代码结构在概念上是错误的?

Python 异步强制超时

使用asyncio协程可以在超时后执行,因此它会在超时后被取消:@asyncio.coroutinedefcoro():yieldfromasyncio.sleep(10)loop=asyncio.get_event_loop()loop.run_until_complete(asyncio.wait_for(coro(),5))以上示例按预期工作(5秒后超时)。但是,当协程不使用asyncio.sleep()(或其他异步协程)时,它似乎不会超时。示例:@asyncio.coroutinedefcoro():importtimetime.sleep(10)loop=asyncio.ge

python - Asyncio 使 HTTP 请求变慢?

我正在使用Asyncio和Requests来对一系列HTTP请求进行基准测试。出于某种原因,使用Asyncio比直接请求要慢一些。知道为什么吗?我是否错误地使用了Asyncio?importasyncioimportfunctoolsimportrequestsimporttimets=time.time()foriinrange(10):@asyncio.coroutinedefdo_checks():loop=asyncio.get_event_loop()req=loop.run_in_executor(None,functools.partial(requests.get,"h

python - 什么会导致 asyncio.new_event_loop() 的简单调用挂起?

我正在使用以下函数来强制协程同步运行:importasyncioimportinspectimporttypesfromasyncioimportBaseEventLoopfromconcurrentimportfuturesdefawait_sync(coro:types.CoroutineType,timeout_s:int=None):""":paramcoro:acoroutineorlambdaloop:coroutine(loop):paramtimeout_s::return:"""loop=asyncio.new_event_loop()#type:BaseEventL

python - 如何等待 create_task() 创建的任务完成?

我编写了一个测试程序来尝试使用create_task(),它需要等到创建的任务完成。我尝试使用loop.run_until_complete()来等待任务完成,但它会导致带有回溯的错误。/Users/jason/.virtualenvs/xxx/bin/python3.5/Users/jason/asyncio/examples/hello_coroutine.pyTraceback(mostrecentcalllast):TestFile"/Users/jason/asyncio/examples/hello_coroutine.py",line42,inHelloWorld,isa

python - 使用 aioamqp 的异步 RabbitMQ 消费者

我正在尝试使用asyncio/aioamqp编写一个异步消费者。我的问题是,回调协程(下方)正在阻塞。我将channel设置为执行basic_consume(),并将回调分配为callback()。回调有一个“yieldfromasyncio.sleep”语句(模拟“工作”),它从发布者那里获取一个整数并在打印消息之前休眠一段时间。如果我发布两条消息,一条时间为“10”,紧接着一条时间为“1”,我预计第二条消息会先打印,因为它的休眠时间较短。相反,回调会阻塞10秒,打印第一条消息,然后打印第二条消息。似乎basic_consume或回调在某处阻塞。有没有其他方法可以解决这个问题?@as

python - 将作业提交到异步事件循环

我想将作业从线程提交到asyncio事件循环(就像run_in_executor但相反)。这是asyncio文档中关于concurrencyandmultithreading的内容:Toscheduleacallbackfromadifferentthread,theBaseEventLoop.call_soon_threadsafe()methodshouldbeused.Exampletoscheduleacoroutinefromadifferentthread:loop.call_soon_threadsafe(asyncio.async,coro_func())这工作正常,但