如何使用 asyncio 连接阻塞和非阻塞代码

2023-11-25

我正在尝试在事件循环之外使用协程函数。 (在本例中,我想调用 Django 中的一个函数,该函数也可以在事件循环内使用)

如果不让调用函数成为协程,似乎没有办法做到这一点。

我意识到 Django 被构建为阻塞的,因此与 asyncio 不兼容。尽管我认为这个问题可能会对正在进行转换或使用遗留代码的人有所帮助。

就此而言,它可能有助于理解异步编程和why它不适用于阻止代码。


经过大量研究后,我认为这些解决方案可能会有所帮助:

  1. 更新您的旧代码以使用 asyncio:

    是的,我知道这可能很艰难和痛苦,但这可能是最明智的选择。如果您想像我一样使用 Django...那么,您需要做很多工作才能使 Django 异步。我不确定这是否可能,但我至少发现了一次尝试:https://github.com/aaugustin/django-c10k-demo(尽管如此,作者在 YouTube 视频中解释了其所有缺点)。

  2. 使用 asyncio.async 或 asyncio.Task:

    这些项目将使您能够在阻塞代码内运行一些异步内容,但这里的缺点是您将无法等待它们完成而不做一些丑陋的事情,例如检查未来是否已完成的 while 循环...呃,但如果您不需要结果,那可能对您有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 asyncio 连接阻塞和非阻塞代码 的相关文章

随机推荐

  • 如何在 Bootstrap 3 网格系统内分隔这些图像?

    我想知道使用 Bootstrap 3 RC2 使用 CSS 在这 3 个图像之间放置空格的最佳方法是什么 因为我目前所做的不是自动调整图像大小 即使我已将宽度设置为自动 pictureid 标签 我希望他们能够内联并相应地调整图像大小 这是
  • OpenSSL 和 MS CryptoAPI:不同的数字签名

    我使用 makecert 实用程序生成带有私钥的 X509 证书 makecert n CN RootCATest r sv RootCATest pvk RootCATest cer makecert sk MyKeyName iv Ro
  • 带有 proguard 的 Ksoap2

    我有一个使用 ksoap2 库的应用程序 一切正常 但是从 Eclipse 导出应用程序时 它显示了这个 Proguard returned with error code 1 See console Note there were 4 d
  • 保存图形后,图形标签和刻度后面的黑色背景,但不在交互视图中

    我有一个奇怪的问题 如果我保存一个图形 它的标签和刻度线将具有黑色背景 请参阅此示例 plt savefig asdsadsad png 我什至没有在此处包含任何代码 因为这种情况发生在最简单的绘图上 即使我之前使用另一台从未出现过此问题的
  • SQLAlchemy 列到行转换,反之亦然——这可能吗?

    我正在寻找一种仅 SQLAlchemy 的解决方案 用于将从表单提交收到的字典转换为数据库中的一系列行 每个行对应提交的每个字段 这是为了处理不同应用程序之间差异很大的首选项和设置 但是 它很可能适用于创建类似数据透视表的功能 我在 ETL
  • 停止在 PHP 中使用“global”

    我有一个config php包含在每个页面中 在配置中我创建了一个看起来像这样的数组 config array config site name Site Name config base path home docs public htm
  • 角度动态行跨度

    人数及其手机号码是动态的 我需要在表格中显示这一点 数据可以包含任意数量的用户名和手机号码 dataList pname abc numbers mobile1 123 mobile2 234 pname mno numbers mobil
  • Play/Java 应用程序中的依赖项 javaWs、javaJpa 等来自哪里?

    我正在使用 Java 在 Play Framework 中启动一个新项目 我检查了build sbt文件并且无法理解依赖项名称的来源 libraryDependencies Seq javaJdbc cache javaWs javaJpa
  • SimpleDateFormat:无法解析的日期异常

    在查看了几篇现有的帖子后 我仍然无法让我的 SimpleDateFormat 解析器正常工作 这是代码 SimpleDateFormat df new SimpleDateFormat EEE dd MMM yyyy HH mm ss Z
  • 如何在ARCore中显示PNG图像?

    我想在 Arcore 中显示 2d png 图像 我不想使用 obj smf imgdb 文件和 3D 图像 我已经引用了很多链接 但没有一个链接显示如何使用 Arcore 仅显示 2d png 图像 https github com go
  • Java:在小程序中将pdf文件从URL读取到字节数组/ByteBuffer中

    我试图找出为什么这个特定的代码片段对我不起作用 我有一个小程序 它应该读取 pdf 并使用 pdf 渲染器库显示它 但由于某种原因 当我读取服务器上的 pdf 文件时 它们最终被损坏 我已经通过再次写回文件来测试它 我尝试在 IE 和 Fi
  • PHP将csv列读入数组

    我有一个 php 函数可以让我将 csv 列 COLUMN NOT LINE 读取到数组或字符串中 先感谢您 csv array map str getcsv file data csv header array shift csv Sep
  • 使用 socket.gethostname 时,socket.getfqdn() 和 socket.gethostname() 给出不同的 IP 地址

    我正在运行一个虚拟机 它提供以下值以及运行代码的时间 通过在网站上执行一些操作 socket getfqdn x vps 01 abc it socket gethostname x vps 01 socket gethostbyname
  • 如果没有断言,pytest 会失败吗?

    今天我的测试失败了 但很高兴成功了 因为我忘记了最后一行相当重要的一行 assert actual expected 我希望机器将来能够发现这个错误 有没有办法让 pytest 检测测试函数是否未断言任何内容 并将其视为测试失败 当然 这需
  • firestore 规则中是否有循环?

    我想知道是否有更简单的方法来实现这个规则 刚刚开始尝试 firestore match emails emailId allow write if request resource data attachments size 0 reque
  • 在C#背后的代码中实现javascript确认框

    我想从代码后面实现javascript确认框 我的要求是在一种方法中我需要提出一个确认框 根据结果我需要实现差异功能 例如 如果确认框确定 则添加税费 如果取消则不加税 我正在尝试这样的事情 但它对我没有帮助 ScriptManager R
  • Netcat:使用 nc -l port_number 而不是 nc -l -p port_number

    这个问题是在这个问题之后 在 openSUSE 中工作的套接字在 Debian 中不起作用 在 Debian 系统上使用套接字时 我必须使用 nc l p port number 来模拟我想要与之通信的服务器 如果我使用 nc l port
  • 使用 Oracle 的块过程 PL/SQL

    我有一个程序 我希望只有一个用户可以同时执行该程序 这就是我的想法 考虑通过 dbms lock 使用命名锁 http download oracle com docs cd B28359 01 appdev 111 b28419 d lo
  • RESTful 应用程序中的乐观锁定

    在工作中 我们正在开发一个 RESTful 应用程序 其中数据层将由 Hibernate 处理 但我们不确定如何处理实体的更新 我们计划执行以下操作 1 客户端通过id请求实体2 Hibernate加载实体 请求的字段 始终带有版本 被复制
  • 如何使用 asyncio 连接阻塞和非阻塞代码

    我正在尝试在事件循环之外使用协程函数 在本例中 我想调用 Django 中的一个函数 该函数也可以在事件循环内使用 如果不让调用函数成为协程 似乎没有办法做到这一点 我意识到 Django 被构建为阻塞的 因此与 asyncio 不兼容 尽