问题标签 [python-trio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
91 浏览

python - 取消fastAPI websocket中剩余的三个托儿所任务的正确方法?

我对 websockets 还是很陌生,我遇到了一个我很难解决的问题。

我需要使用 FastAPI 构建一个 websocket 端点,其中一组任务异步运行(为此我使用三重奏),每个任务通过 websocket 实时返回一个 json 值。

我已经设法满足这些要求,我的代码如下所示:

看起来run_task像这样:

但是现在,考虑到两种情况,我应该取消/跳过当前剩余的托儿所任务,但我对如何实现这一点有点茫然。

我给出的两种情况如下:

  • 场景 1:想象当用户按下按钮时调用端点,如果用户在某些任务仍在运行时再次按下按钮,它们应该被取消或跳过,并且应该重新开始流程

  • 场景2:如果websocket要关闭,用户要刷新页面,或者在nursery任务完成之前退出,剩下的任务应该被取消或跳过

我正在尝试更多地阅读Python - 如何取消由 python-trio 中的托儿所产生的特定任务,但我仍然对如何在进入新托儿所之前取消具有取消范围的先前托儿所感到困惑。我是否应该创建一个额外的任务来监视变量或其他东西并在它更改后取消?但是,一旦所有其他任务完成,我就必须停止该任务

0 投票
1 回答
32 浏览

python - uwsgi worker 在退出时挂起,但前提是它使用了异步三重奏模块

我有一个 Django 站点,该站点使用该trio_cdp包使用无头 Google Chrome 生成 PDF。这个包是异步的,但是我的Django项目是同步的,所以它必须在里面运行trio.run()

它还使用 uwsgi 锁,以便一次只有一个客户端可以生成 PDF(无头 Chrome 将页面加载到单个虚拟选项卡中,因此一次只能生成一个)

这是代码:

令人讨厌的是,任何运行此特定任务的 uwsgi 工作人员稍后都会在退出时挂起,直到它被强行杀死。如果 uwsgi 运行并且没有人访问 PDF 生成页面,则所有 uwsgi 工作人员都可以正常退出。运行 render_pdf 函数的 uwsgi 工作人员始终需要被杀死。

比如pid 20887运行了render_pdf,后来在尝试关闭uwsgi的时候,出现了这样的情况:

How can I fix this? Any help is much appreciated :)

0 投票
1 回答
24 浏览

python - 如何在 python 中将 trio_asyncio 与旧版同步代码一起使用

我有同步的旧版 python 应用程序。我开始以这种方式(简化)在此应用程序中使用异步代码:

在里面legacyCode我可以使用trio.from_thread.run(asyncMethod)从遗留同步代码中运行一些异步代码。它运行良好,但现在我需要包含triopg内部使用的新库 () trio_asyncio

所以我需要修改启动应用程序的方式 - 我需要替换trio.runtrio_asyncio.run. 这很容易,但是在trio.to_thread->之后trio.from_thread,异步代码不起作用,因为 trio_asyncio 没有定义循环。

这是一个简短的演示:

我应该如何修改上面的示例,以便 trio_asyncio 能够在amain()函数中找到循环?还是这种方法完全错误?trio如果是这样,当库需要使用和时,如何在大型同步应用程序中使用小块异步代码trio_asyncio

我使用python 3.9。