草庐IT

Asyncio库

全部标签

python - 为什么 asyncio.Future 与 concurrent.futures.Future 不兼容?

这两个类代表了并发编程的优秀抽象,因此它们不支持相同的API有点令人不安。具体根据docs:asyncio.Futureisalmostcompatiblewithconcurrent.futures.Future.Differences:result()andexception()donottakeatimeoutargumentandraiseanexceptionwhenthefutureisn’tdoneyet.Callbacksregisteredwithadd_done_callback()arealwayscalledviatheeventloop'scall_soon_

python - 为什么我在 Python asyncio 中收到 "Task was destroyed but it is pending"错误?

我使用asyncio和漂亮的aiohttp。主要思想是我向服务器发出请求(它返回链接)然后我想从所有链接下载文件parallel(类似于example)。代码:importaiohttpimportasyncio@asyncio.coroutinedefdownloader(file):print('Download',file['title'])yieldfromasyncio.sleep(1.0)#someactionstodownloadprint('OK',file['title'])defrun():r=yieldfromaiohttp.request('get','my_u

python - asyncio 的 loop.run_in_executor 是线程安全的吗?

我正在试用asyncio,并且必须将它与一些普通的多线程阻塞代码混合使用,因此我需要使用run_in_exector卸载执行。asynciodocswarnthat"mostfunctions"aren'tthreadsafe,并且call_soon_threadsafe是唯一的线程安全函数。还有一些其他的,比如Future.add_done_callback,也被明确记录为线程安全的。然后它后面有一句话说“你可以使用run_in_executor在其他线程中运行回调”,但没有具体评论它的线程安全性。run_in_executor没有文档是线程安全的,但查看源代码,如果采用正确的代码路

python - Asyncio 与 Gevent

关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.2年前关闭。Improvethisquestion背景我曾经在一个Python2系统上工作过,该系统有很多同步编写的自定义I/O代码,并使用线程进行扩展。在某些时候,我们无法进一步扩展它,并意识到我们必须切换到异步编程。Twisted是流行的选择,但我们想避免它的回调hell。它确实有@inlineCallbacks装饰器,它使用生成器魔法有效地实现了协程,其他一些库也是如此。这更能忍受,但感觉有点片状。然后我们找到了gevent.您

python - 将 gunicorn 与 asyncio 一起使用时,如何屈服于另一个请求?

我正在尝试将Gunicorn中的gaiohttpworker与我正在使用以下命令开发的Django应用程序一起使用:gunicorn-kgaiohttp-blocalhost:8080myproject.wsgi我的最终目标是能够并发处理请求——即让1个gunicornworker同时处理多个请求。I/O绑定(bind)操作使这些请求变慢。当我处理请求时,我知道事件循环已经在运行:classMyView(View):defget(self,request):loop=asyncio.get_event_loop()loop.is_running()#True...问题:如何在我的Vie

python - 带有 INFO 的 python3.5 垃圾邮件中的 Asyncio

当我在Python3.5中启用异步调试时,我几乎每秒都会收到这样的消息:INFO:asyncio:poll999.470mstook1001.159ms:timeoutINFO:asyncio:poll999.264mstook1001.092ms:timeoutINFO:asyncio:poll999.454mstook1001.059ms:timeout这是重现此问题的最小代码:importasyncioimportlogginglogging.basicConfig(level=logging.DEBUG)loop=asyncio.get_event_loop()loop.set

python - 在 Python Asyncio 中限制异步函数

我有一个list的awaitables我想传递给asyncio.AbstractEventLoop但我需要限制对第三方API的请求。我想避免等待将future传递给循环的东西,因为与此同时我阻止了我的循环等待。我有什么选择?Semaphores和ThreadPools将限制并发运行的数量,但这不是我的问题。我需要将我的请求限制为100/秒,但完成请求需要多长时间并不重要。这是一个使用标准库的非常简洁的(非)工作示例,它演示了问题。这应该以100/秒的速度throttle,但以116.651/秒的速度throttle。在asyncio中限制异步请求调度的最佳方法是什么?工作代码:impo

python - 如何重新连接 asyncio 上的套接字?

我想在app.py上使用异步创建两个协议(protocol)(TcpClient和UdpServer),其中TcpClient将与server.py和用作UDP服务器的UdpServer建立持久连接:我需要的:a)两个协议(protocol)进行通信:互相调用方法。这仅适用于第一次连接。如果TcpClient重新连接,它不能再次发送字符串“sendtotcp”。来自UdpServer。我检查了print(self)并且TcpClient创建了一个新实例,旧实例仍然存在但没有连接,但我不知道如何重构它。我认为我以错误的方式使用了asyncio。b)当TcpClient断开与server.

python - 从 asyncio.Protocol.data_received 调用协程

这类似于Callingcoroutinesinasyncio.Protocol.data_received但我认为这需要一个新问题。我有一个像这样设置的简单服务器loop.create_unix_server(lambda:protocol,path=serverSocket)如果我这样做,它工作正常defdata_received(self,data):data=b'datareply'self.send(data)我的客户得到回复。但我无法让它与任何类型的asyncio调用一起工作。我尝试了以下所有方法,但均无效。@asyncio.coroutinedefgo(self):yiel

python - 如何衡量 Python 的 asyncio 代码性能?

我不能使用普通的工具和技术来衡量协程的性能,因为它在await上花费的时间不应该被考虑在内(或者它应该只考虑从可等待但不是IO延迟)。那么如何衡量协程所花费的时间呢?我如何比较2个实现并找到更有效的?我使用什么工具? 最佳答案 这个答案最初包含两个不同的解决方案:第一个基于猴子补丁,第二个不适用于python3.7及更高版本。这个新版本有望提供一种更好、更强大的方法。首先,标准计时工具,例如time可用于确定程序的CPU时间,这通常是我们在测试异步应用程序的性能时感兴趣的内容。这些测量也可以在python中使用time.proces