请问 Python 线程是否可以使用 asyncio 协程代替?

发布于 2022-09-11 23:30:49 字数 570 浏览 29 评论 0

假设我有这么一段代码:

import threading
import time

time_list = []

def listen():
    last_second = 0
    while True:
        cur_time = str(int(time.time()))
        if not last_second == cur_time:
            print('加入 %s' % cur_time)
            threading.Thread(target=wait_callback, args=(cur_time,)).start()
        last_second = cur_time
        time.sleep(0.5)

def wait_callback(cur_time):
    """执行耗时任务"""
    time.sleep(2)
    print('执行 %s......' % cur_time)

listen()

请问其中的线程能否协程代替?由协程代替执行耗时任务。

这只是一个示例代码,真实环境中使用的双线程队列消费。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

-黛色若梦 2022-09-18 23:30:49

能不能用协程代替,要看这个耗时任务具体是什么,这个任务里相应的代码和相关的库也要是协程的写法。例如本来里面可能是一个使用requests库来发送网络请求的,改成协程可以用aiohttp,相应的写法都要改。

小鸟爱天空丶 2022-09-18 23:30:49

首先要搞清楚概念和原理,线程、进程、协程是不同的概念和原理。
简单说进行就是不同的cpu各自执行。进程是不同的进程同时执行。协程是一个进程一个线程,通过上下文切换避免io等待。

应用上,如果你的是io密集型,比如大量文件操作和网络请求可以使用协程实现来减少等待时间。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文