如何启动协程并继续同步任务?

如何启动协程并继续同步任务?,第1张

概述我试图了解asyncio和端口我的线程未定.我将以两个无限运行的线程和一个非线程循环(所有这些都输出到控制台)为例.线程版本是import threading import time def a(): while True: time.sleep(1) print('a') def b(): while T

我试图了解asyncio和端口我的线程未定.我将以两个无限运行的线程和一个非线程循环(所有这些都输出到控制台)为例.

线程版本是

@H_403_7@import threadingimport timedef a(): while True: time.sleep(1) print('a')def b(): while True: time.sleep(2) print('b')threading.Thread(target=a).start()threading.Thread(target=b).start()while True: time.sleep(3) print('c')

我现在尝试将此端口移植到基于documentation的asyncio.

问题1:我不明白如何添加非线程任务,因为我看到的所有示例都显示了程序结束时正在进行的循环,该循环控制着asyncio线程.

然后我希望至少有两个并行运行的第一个线程(a和b)(最坏的情况是,将第三个c添加为线程,放弃混合线程和非线程 *** 作的想法):

@H_403_7@import asyncioimport timeasync def a(): while True: await asyncio.sleep(1) print('a')async def b(): while True: await asyncio.sleep(2) print('b')async def mainloop(): await a() await b()loop = asyncio.get_event_loop()loop.run_until_complete(mainloop())loop.close()

问题2:输出是a的序列,表示根本不调用b()协程.是不是应该启动a()并返回执行(然后启动b())?最佳答案等待在某一点停止执行,你等待一个(),并且你在()中有一个无限循环,所以它的逻辑b()不会被调用.想想它就像在mainloop()中插入一个().

考虑这个例子:

@H_403_7@async def main(): while True: await asyncio.sleep(1) print('in') print('out (never gets printed)')

要实现您想要的目标,您需要创建一个管理多个协同程序的未来. asyncio.gather就是为了这个.

@H_403_7@import asyncioasync def a(): while True: await asyncio.sleep(1) print('a')async def b(): while True: await asyncio.sleep(2) print('b')async def main(): await asyncio.gather(a(),b())loop = asyncio.get_event_loop()loop.run_until_complete(main())loop.close() 总结

以上是内存溢出为你收集整理的如何启动协程并继续同步任务?全部内容,希望文章能够帮你解决如何启动协程并继续同步任务?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1206052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存