![]() |
1
8
潜入iterparse源为我提供了解决方案。下面是一个简单的示例,演示如何动态构建XML树并在元素的关闭标记后处理元素:
在我的例子中,我最终从twisted向它提供数据,但它也应该使用非阻塞套接字。 |
![]() |
2
4
我认为这有两个组件,非阻塞网络I/O和面向流的XML解析器。 对于前者,您必须选择一个非阻塞网络框架,或者为此推出您自己的解决方案。Twisted当然会起作用,但我个人觉得控制框架的反转很难让我的大脑思考。您可能需要跟踪回调中的许多状态,以向解析器提供反馈。出于这个原因,我倾向于 Eventlet 更容易编程,我认为它非常适合这种情况。 本质上,它允许您编写代码 犹如 您使用的是阻塞套接字调用(使用普通循环、生成器或任何您喜欢的方法),但您可以将其生成一个单独的协程(“greenlet”),当I/O操作阻塞时,该协程将自动执行协作产出,从而允许其他协程运行。 这使得使用任何面向流的解析器再次变得微不足道,因为代码的结构类似于普通的阻塞调用。这还意味着许多不直接处理套接字或其他I/O(例如解析器)的库不必经过特殊修改而成为非阻塞库:如果它们阻塞,Eventlet将生成协同路由。 轻微地 magic,但我发现它的学习曲线比Twisted简单得多,并且生成的代码更简单,因为您不必将逻辑“由内而外”地转换以适应框架。 |
![]() |
3
1
如果不使用线程,可以使用事件循环并轮询非阻塞套接字。
或者,
无论如何,我认为您将不得不使用线程、额外的进程或编织一些同样复杂的异步魔法。 |
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |