pycopy的轻量级类异步库,围绕本机python协同路由构建。

pycopy-uasyncio的Python项目详细描述


uasycio是一个最小异步调度库,大致上 模仿了cpython的异步。uasyncio用于 Pycopy,一个轻量级的 最简单的python实现。

uasyncio不使用naive always迭代调度算法, 但是执行基于实时的调度,这允许它(和 因此整个系统)在无事可做的情况下睡觉(实际上 它的实现依赖于i/o调度算法 实际执行等待操作)。

异步的主要概念差异:

  • 避免定义未来的概念,尤其是包装协程 在未来,就像cpython asyncio一样。uasyncio直接与 协同程序(和回调)。
  • 提供的方法是更一致的协程。
  • uasyncio使用环绕毫秒时基(作为所有 pycopy端口。)
  • 不提供单个大包装,而是提供子包装的数量 (每个都可以单独安装)。

具体区别:

  • 对于毫秒调度,loop.call_later_ms()uasyncio.sleep_ms()已提供。
  • 由于没有单调时间,因此不提供loop.call_at()。 取而代之的是loop.call_at_(),它被认为是内部的 函数和具有稍微不同的签名。
  • call_*函数不返回由调度的句柄和回调 它们不能取消。如果需要取消,它们应该 接受对象作为参数,并应设置“取消”标志 在对象中,用于测试回调。
  • Future对象不可用。
  • ensure_future()Task()只执行调度操作 并返回本机协同程序,而不是未来/任务对象。
  • 其他一些功能尚未实现。
  • streamwriter方法是协同程序。在cpython asyncio中, streamwriter.write()是一个普通函数(可能会缓冲 无限制的数据量),uasyncio提供了coroutine streamwriter.awrite() 相反。此外,streamreader和streamwriter都有.aclose() 协同程序方法。

高级主题

术语:

  • 任务-顶级协同程序,在事件循环中使用其 创建任务()方法。(或者,作为uasyncio扩展,一个coutroutine 对象由另一个协程传递给“yield”语句,此 相当于create_task()调用)。运行不同的任务 以合作的方式同时进行。每个任务也可以调用 递归地另一个协程(在这种情况下调用协程 将“等待”(字面意思)完成所谓的联程。更多 在形式上,任务是在顶层路由的协同调用树 传递给create_tast(),并由其标识的协程。

任务间资源共享注意事项

就像在抢占线程之间共享资源一样,共享资源 uasyncio之间的协作任务有其特殊性和局限性。 实际上,由于I/O调度的实现,还有 要考虑的特点。但是让我们从陈述资源开始 任务/线程之间的共享通常是一个错误。例如,如果两者都是 任务写入资源时,它们可能会穿插在 不可预知的方式。阅读更成问题:不同的任务 可能得到部分输入,或者一个可以得到全部,而另一个则完全没有。if任务 实现一些协议,即I/O对话框,这将导致不正确的 行为和/或死锁。因此,规则是:不要共享相同的I/O 对象,特别是streamreader和streamwriter对象 不同的任务。(当然,它们可以传递给 当前任务)。

上面的一个极端情况是试图使用相同的reader部分 一个任务中的streamreader/streamwriter部分,而另一个任务中的writer部分。 这可能只是推测性使用,也不支持: streamreader和streamwriter表示相同的半双工部分 I/O流,两者都必须在一个任务。如果你需要什么 像上面一样,您需要创建不同的streamreader/writer对 (可能来自不同的底层I/O对象)。

虽然上面给出了streamreader/streamwriter示例,但它适用于 其他I/O对象。例如,uasyncio.udp套接字 不应将相同内容传递给两个不同的任务。如果你需要这个,2 应使用不同的插座。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java IllegalStateException:在onBackPressed()上的onSaveInstanceState之后无法执行此操作;   java处理巨大的JSON响应   指向易趣时出现java fileNotFoundException。来自手机的com   java从数组填充GridView   两个三维向量之间的角度   java无法运行程序“cf”:错误=2,没有这样的文件或目录,错误=2   java如何使用DOCX4J从<a href到MS word bookmark/hyperlink创建内部超链接。使用DOCX4J为word文档中的TOC创建超链接   设计模式java的目标是什么。尼奥。文件CopyOption接口?   java从SQLiteDB获取选择信息?   Java引用错误   使用函数作为参数的java   tic-tac-toe似乎无法正确编译我的方法(Java)   使用泛型作为方法参数的java   java类'OIDCtenatConfig'无法解析,为什么?   如果Java中有两个同名的方法,如何告诉编译器我将使用什么方法?   java hazelcast flake id返回不同的数据   java如何按值对树集排序?   java为什么泛型类型信息在类文件中可见?   JavaSpringDataJPA+SpringProjections使用@Query(native和JPQL)为相关实体返回null