time.sleep(6) 领先 6 秒

93 阅读5分钟

图片

将小榆设为星标!防止走丢

5 月 15 日,群友在技术交流群里发了一张华为发布会现场的一段演示代码图。 该图所示代码较为简单,发现第二行指令输入“帮我”,有可能手抖敲击回车快了,程序没有识别到指令,于是抛出了一段错误提示内容。

图片

群图片有些模糊,担心我眼睛看差,我找了现场视频查看当时的情况。

看现场演示是第一个指令回车敲快了,抛出“keyboard interrupt” 中断异常,提示代码出错所在位置和显现一行熟悉的代码:time.sleep(6)。

演示者继续输入完整的指令“帮我找一张小朋友的照片,并生成为骑士图”,指令识别成功,一会就生成出了预期效果图。

演示者随即解释:“这个就是我们通过快速 RAG 图,所生成出来的一张照片。”

什么是 RAG** 呢,就是指人工智能领域的 RAG 搜索增强技术。

图片

程序出错抛出异常,暴露异常所在位置是常规操作,便于开发者排查问题,但也会暴露出内部代码从而发生泄漏隐私。

此次抛出的异常,我给大家逐行解读抛出异常的大致内容:

输入指令找到主程序 “mian.py” ,然后把图片写到目标文件,再继续执行的时候,执行到一个代码片段:time.sleep(6),睡眠 6 秒之后输出目标图片。

作为开发者,看到这段 time.sleep(6) 这句代码可一点不陌生,它的用处可多了。

寻思着大佬写的代码也这么精简和朴实,只能向大佬靠拢,甚至想查看代码提交记录认识一下本尊了。

想起我早期菜鸟的时候,经常会拿 time.sleep 代码干一些不可描述的事情,所以会情不自禁的去 yy 大佬这段简朴的代码也情有可原吧。

图片

但出于尊重,我还是忍住了我那菜鸟般的遐想,毕竟有损大佬名声。

退一万步来讲,也可能是我们的问题,没有读懂大佬高深莫测的意图。于是我又打开了现场演示的视频,当演示者输入指令“帮我找一张小朋友的照片,并生成为骑士照”。

输入敲回车的那一刻,我打开了秒表,6,5...1,成功出图,并且目标图片文件已经生成。

图片

我...

可我还是没有想通 time.sleep(6),这段睡眠 6 秒出结果的真实意图,有可能是大佬给在场观众留的一些悬念;也有可能是担心大模型使用了 RAG 增强搜索速度过快导致观众对大模型处理没有质感从而加上这行代码。

出于谨慎考虑,我选择看看网友们的解读,我生怕因为自己遐想过头了,有损大佬的名誉,可不兴这样。

看了网友们的猜想,我觉得他们属实有些过分了,一度以菜鸟的思路作出荒唐的猜想。

第一种(在后台线程中执行大模型推理代码,打印报错是主线程中的信息,捕获异常之后通过旗标通知后台线程停止计算):


import time
import traceback
from threading import Thread

import cv2
import torch

running = True

print = lambda *args, **kwargs: __builtins__.print(' '.join(map(str, args)) + '\n', end='', **kwargs)


def ModelInference(prompt, save_path):
    # 通过旗标传递推理程序是否中途退出
    global running

    # 检查推理是否已经启动
    print('[INFO] 开始执行模型推理:', (prompt, save_path))

    start_time = time.time()
    while True:
        if not running:
            print('[INFO] 按下Ctrl-C介入退出')
            return

        # 模拟AI计算代码,耗时略大于6秒
        img = ...
        if time.time() - start_time > 6.2:
            break

    # 将推理图片写入路径
    cv2.imwrite(img, save_path)

    # 检查推理是否运行结束
    print('[INFO] 运行输出结果完毕')


if __name__ == '__main__':
    # 等待用户输入提示词信息
    prompt = input('>>> ')
    save_path = '/home/demo/output.jpeg'

    # 发起后台线程,运行推理任务,并将参数传递给后台线程
    th = Thread(target=ModelInference, args=(prompt, save_path))
    th.start()

    # 捕获Ctrl-C异常,避免按下Ctrl-C后主线程退出,但是后台线程继续执行任务
    try:
        # 错误信息显示就是打印在这里
        time.sleep(6)
    except KeyboardInterrupt:
        # 通过设置全局变量,传递AI推理线程中途退出的信号
        running = False
        # 打印异常信息,因为图示中有报错显示
        traceback.print_exc()

    # 阻塞主线程直到后台线程运行结束,因为视频中主线程没有立刻运行结束
    th.join()

第二种(这个太简单了,华为运行的肯定不是这一种):


import time

input('>>> ')
time.sleep(6)

with open('/home/demo/output.jpeg''wb') as f:
    f.write(b'...')

我也觉得不可能,不会猜想还是别乱猜想。毕竟名声远扬的产品不是一两句代码能够解释的。

图片

我说几句吧,我觉得在公开现场和直播演示产品,本来就是风险比较大的,他们能够有勇气去演示,就已经超越 98% 的程序员了。

而我凭借几年经验也只敢选择 PPT 这种来演示,或者制作好的演示片段。

作为经历过风雨的程序员,现场出现一点状况是在所难免的,我回想我自己演示数据大屏的时候,不也频繁使用 sleep 达到某种数据效果,也偶尔使用静态页+假数据通过一些手段达到动画效果来完成任务。

退一万步讲,我们自己都没做好,没有资格要求别人做到怎样,况且一个 time.sleep(6) 这种代码能够解释什么呢?

不过,由于互联网上的知识比较新奇,导致我有一个关于网络的疑问,对以下不良行为告知书所说的一致 ip 地址,我发现我本地 ip 也是 127.0.0.1,这是不是也属于涉嫌串通招标共犯?我应该怎么做才好?

图片