首页 > 其他分享 >celery执行异步任务并调用返回值

celery执行异步任务并调用返回值

时间:2024-09-26 09:27:44浏览次数:1  
标签:异步 url tool celery result 返回值 path type oss

@shared_task(queue='tool_invoke')
def tool_invoke_task_queue(type: str, data: Union[bytes, str], path: str = None):
    bucket = 'tools'

    try:
        if type == 'image':
            file = download_and_convert_to_filestorage(data)
            data = file.read()
            logger.info(f"file.name {file.name}")
            # path = f"{path}/{file.name}"

        MINIO.put(bucket, path, data)

    except Exception as e:
        raise ValueError('文件上传失败')

    url = MINIO.get_public_url(bucket, path)
    url = str(URL(os.getenv('OSS_FILE_PRE')) / url.lstrip("/"))
    logger.info(f"文件的url为: {url}")

    return url

        result = tool.invoke(
            user_id="",
            tool_parameters=tool_parameters
        )

        if isinstance(result, ToolInvokeMessage):
            result = {**result.dict(), 'type': result.type.value}
            if result['type'] not in ['text', 'json','link']:
                result = ToolInvokeService.format_result(result, oss_base_path)

        elif isinstance(result, list):
            result = [ToolInvokeService.format_result(
                {**r.dict(), 'type': r.type.value},
                oss_base_path
            ) for r in result]
        return result, credentials_schema
    @staticmethod
    def format_result(result: dict, oss_base_path: str) -> dict:
        if result['type'] in ['text', 'json','link']:
            return result
        if result['type'] == 'blob':
            path = f"{oss_base_path}{ToolInvokeService.mime_type_to_extension(result['meta']['mime_type'])}"
        elif result['type'] == 'image':
            path = oss_base_path
        async_result=tool_invoke_task_queue.delay(result['type'], result['message'], path)
        url = async_result.get()
        print("url",url)
        result['message'] = url

        return result

当直接执行如下代码时

a=tool_invoke_task_queue.delay(a,b)
result['message']=a

会报错:

sqlalchemy.exc.StatementError: (builtins.TypeError) Object of type AsyncResult is not JSON serializable

因此,需要解决异步任务获取返回值

标签:异步,url,tool,celery,result,返回值,path,type,oss
From: https://www.cnblogs.com/Gimm/p/18432591

相关文章

  • 06 函数返回值
    6、函数返回值P93deffunc(arg):#....return9#返回值为9默认:returnNoneval=func('adsfadsf')#1.让用户输入一段字符串,计算字符串中有多少A字符的个数。有多少个就在文件a.txt中写多少个“李邵奇”。defget_char_count(data):sum_counter=0......
  • JAVA Response 返回值再拿
    在Java中,处理HTTP响应的返回值通常涉及使用库如HttpURLConnection或更现代的库如HttpClient。以下是一个基本的示例,展示了如何发送请求并处理响应:使用 HttpURLConnectionimportjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;im......
  • 一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
    一个.NET开源、快速、低延迟的异步套接字服务器和客户端库 思维导航前言项目介绍主要特性功能组件使用示例基准测试项目源代码TCP聊天服务器示例项目源码地址优秀项目和框架精选前言最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分......
  • 阿里巴巴商品详情API返回值中的商品标签与关键词
    阿里巴巴的商品详情API(通常指的是阿里巴巴开放平台提供的API服务)为开发者提供了访问和获取商品信息的途径。这些API的返回值中会包含商品的详细信息,包括但不限于商品的基本信息、价格、库存、物流信息以及标签和关键词等。然而,关于“商品标签与关键词含代码”的具体描述,可能需要根......
  • boost.asio 异步网络编程
    Proactor模式Proactor模式是一种异步I/O处理模式,常用于高性能网络服务器和并发系统中。与传统的Reactor模式(基于事件驱动的I/O多路复用)不同,Proactor模式使用异步I/O操作来处理I/O任务,从而提高了系统的并发能力和响应速度。1)异步优点:异步编程有助于提高应用程序的......
  • 基于异步通讯事件触发的二阶离散系统同步算法设计
    精确计时在时间敏感的工业物联网(IIoT)中起着关键作用。然而,精确的时间同步需要更频繁的数据包交换,这会消耗更多的通信带宽和能量。这在电池供电的无线节点中是一个特别的挑战,低通信成本已成为时钟同步的重要因素。为了应对分布式无线传感器网络中实现低通信成本时钟同步的挑......
  • 使用Promise将异步操作变为同步
    letpromise=newPromise(function(resolve,reject){//异步操作letsuccess=true;//这是一个假设的条件if(success){resolve("操作成功");}else{reject("操作失败");}});Promise可以处于以下三种状态之一:Pending(......
  • mapper返回值类型
    在MyBatis中,Mapper接口的方法可以返回不同类型的值,这取决于你希望如何处理查询的结果。以下是一些常见的返回类型:void:当不需要返回值时使用。通常用于INSERT、UPDATE和DELETE操作。int 或 Integer:返回受影响行数,通常用于检查操作是否成功。boolean:通常用于检查是......
  • auto` 作为返回值类型的一些限制
    在C++中,auto作为返回值类型有一些限制,这与类型推导的方式和时机有关。虽然在很多场景下auto可以简化代码,但它不能直接用于函数返回类型,这是因为在编译时类型推导的机制不同于局部变量的类型推导。具体原因如下:1.推导时机问题当我们在函数体中使用auto声明变量时,编译器......
  • 一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
    前言最近有不少小伙伴在问:.NET有什么值得推荐的网络通信框架?今天大姚给大家分享一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服务器和客户端库:NetCoreServer。项目介绍NetCoreServer是一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服务器和客户端库。它支......