ydf0509/funboost

发现一个有趣的问题

LeeC20 opened this issue · 3 comments

是这样的

@boost(queue_name=OutsideTopicEum.request,
       broker_kind=BrokerEnum.KAFKA_CONFLUENT_SASlPlAIN,
       qps=1,
       concurrent_num=1,
       function_result_status_persistance_conf=f_config)
def get_request(cmd: str, task_id: str, request: dict, time_stamp: str, send_times: int):

这是一个 boost类

  var = {
      "cmd": "requests",
      "task_id": "666",
      "request": {
          "ply_file": {"fileId": "xxx"},
          "json_file": {"fileId": "xxx"}
      },
      "time_stamp": "",
      "send_times": 1,
  
  }
  
  for i in range(5):
  
      var['task_id'] = f"{var['task_id']}{i}"
  
      get_request.publish(var, task_id=var['task_id'])
      time.sleep(1)

当我push的内容在循环外的时候

第一次publisher打印的结果, 可以看到extra中的task id 是我设置的task id

base_publisher.py:245" -publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '6660', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6660', 'publish_time': 1701313605.7148, 'publish_time_format': '2023-11-30 11:06:45'}} 

但是有趣的来了, 接下来的几次中,extra还是第一次的内容,

  -publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '666012', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6660', 'publish_time': 1701313605.7148, 'publish_time_format': '2023-11-30 11:06:45'}}
  -publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '6660123', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6660', 'publish_time': 1701313605.7148, 'publish_time_format': '2023-11-30 11:06:45'}} 
  -publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '66601234', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6660', 'publish_time': 1701313605.7148, 'publish_time_format': '2023-11-30 11:06:45'}} 

但是当我改成这样,放入循环内的时候,

for i in range(5):

    var = {
        "cmd": "requests",
        "task_id": "666",
        "request": {
            "ply_file": {"fileId": "xxx"},
            "json_file": {"fileId": "xxx"}
        },
        "time_stamp": "",
        "send_times": 1,

    }

    var['task_id'] = f"{var['task_id']}{i}"

    get_request.publish(var, task_id=var['task_id'])
    time.sleep(1)

打印的结果又是对的了

-publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '6660', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6660', 'publish_time': 1701314097.9776, 'publish_time_format': '2023-11-30 11:14:57'}}
-publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '6661', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6661', 'publish_time': 1701314098.9797, 'publish_time_format': '2023-11-30 11:14:58'}} 
-publish-[print]-  msg,, msg, {'cmd': 'requests', 'task_id': '6662', 'request': {'ply_file': {'fileId': 'xxx'}, 'json_file': {'fileId': 'xxx'}}, 'time_stamp': '', 'send_times': 1, 'extra': {'task_id': '6662', 'publish_time': 1701314099.9914, 'publish_time_format': '2023-11-30 11:14:59'}}

想知道这是因为什么引起的

甚至我只要copy一下, 改下变量名也是可以的

basic_var = {
    "cmd": "requests",
    "task_id": "1000",
    "request": {
        "ply_file": {"fileId": "xxx"},
        "json_file": {"fileId": "xxx"}
    },
    "time_stamp": "",
    "send_times": 1,

}

for i in range(5):

    var = basic_var.copy()

    var['task_id'] = f"{var['task_id']}{i}"

    get_request.publish(var, task_id=var['task_id'])
    time.sleep(1)

可变对象知识,我在30.9版本内部主动copy了,你安装下30.9吧那. 这个问题不神秘,主要是用户要知道什么是可变对象

好, 我更新一下