本源量子云服务

在复杂的量子线路模拟中有必要借助于高性能计算机集群或真实的量子计算机,用云计算的方式替代本地计算,在一定程度上减轻用户的计算成本,获得更好的计算体验。

本源量子量子云平台经过本源司南服务向部署在远程的量子计算机或计算集群提交任务,并接收返回的结果,流程如下图所示。

../_images/qcloud.png

pyqpanda封装了多种量子计算服务,可以向本源量子的计算服务器集群或量子真实芯片发送计算指令,并获取计算结果,具体见下图。

../_images/2024cloud.png

高性能计算集群云服务

当涉及到处理复杂的量子计算和模拟任务时,高性能计算集群成为了不可或缺的工具。

与个人电脑的单进程计算方式不同,高性能计算集群采用分布式计算算法,意味着计算任务可以被分解成多个子任务,并在集群中的多个计算节点上并行执行,从而大大提升了计算效率和速度。这对于处理复杂的量子计算任务尤为重要,因为量子线路模拟往往涉及大量的计算和存储需求。通过分布式计算,我们能够将这些庞大的计算任务分解成更小的部分,在多个节点上同时进行处理,从而显著缩短了计算时间。

本源量子的高性能计算集群提供多种功能强大的虚拟机计算后端,针对不同的量子计算模型和算法进行了优化,适用于不同情况下的量子线路模拟需求,我们引入 QCloud 来提交任务和查询计算计算结果。

class QCloud(QuantumMachine)

量子云计算集群任务管理类,用于管理集群计算,提交任务并获取结果。

参数:

None (None) -- 无参数。

__init__()

创建一个 Quantum Cloud 虚拟机实例。

返回:

无返回值。

返回类型:

None

full_amplitude_measure(prog, shot, task_name='QPanda Experiment')

对给定量子线路执行全振幅采样测量,返回测量结果的概率分布。

参数:
  • prog (QProg) -- 要执行的量子线路。

  • shot (int) -- 测量的次数。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

各测量结果的概率分布。

返回类型:

Dict[str, float]

full_amplitude_pmeasure(prog, qvec, task_name='QPanda Experiment')

对给定量子线路执行全振幅概率测量,测量结果只考虑指定的测量比特,返回测量结果的概率分布。

参数:
  • prog (QProg) -- 要执行的量子线路。

  • qvec (List[int]) -- 指定的测量比特列表。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

各测量结果的概率分布。

返回类型:

Dict[str, float]

get_expectation(prog, hamiltonian, qvec, task_name='QPanda Experiment')

该方法在给定的量子线路下,根据指定的哈密顿量,计算量子态的期望值。

参数:
  • prog (QProg) -- 要执行的量子线路。

  • hamiltonian (List[Tuple[Dict[int, str], float]]) -- 哈密顿量的项和系数组成的列表。

  • qvec (QVec) -- 用于计算期望值的量子比特列表。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

计算得到的期望值。

返回类型:

float

init_qvm(token, is_logged=False)

初始化量子虚拟机。

参数:
  • token (str) -- 访问云服务所需的用户标识。

  • is_logged (bool, optional) -- 是否输出日志,默认为 False。

返回:

无返回值。

返回类型:

None

noise_measure(prog, shot, task_name='QPanda Experiment')

对给定量子线路执行带噪声的测量,返回测量结果的概率分布,需要提前设置噪声模型和参数

参数:
  • prog (QProg) -- 要执行的量子线路。

  • shot (int) -- 测量的次数。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

各测量结果的概率分布。

返回类型:

Dict[str, float]

partial_amplitude_pmeasure(prog, amp_vec, task_name='QPanda Experiment')

对给定量子线路执行部分振幅测量,返回测量结果的概率幅值分布。

参数:
  • prog (QProg) -- 要执行的量子线路。

  • amp_vec (List[str]) -- 部分振幅测量的振幅向量。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

各测量结果的概率幅值分布。

返回类型:

Dict[str, complex]

set_noise_model(arg0, arg1, arg2)

该方法用于设置量子虚拟机的噪声模型,包括噪声模型本身和相关的噪声参数。

参数:
  • arg0 (NoiseModel) -- 噪声模型。

  • arg1 (List[float]) -- 噪声参数列表。

  • arg2 (List[float]) -- 噪声参数列表。

返回:

无返回值。

返回类型:

None

single_amplitude_pmeasure(prog, amplitude, task_name='QPanda Experiment')

对给定量子线路执行单振幅测量,返回测量结果的概率幅值。

参数:
  • prog (QProg) -- 要执行的量子线路。

  • amplitude (str) -- 单振幅测量的振幅。

  • task_name (str, optional) -- 任务名称,默认为 'QPanda Experiment'。

返回:

测量结果的概率幅值。

返回类型:

complex

我们以简单的量子线路为例,导入必要的库,然后是初始化和设置用户信息过程,用户可以在本源量子云官网 QCloud_免费注册获取用户标识符,参考 真实芯片计算服务 章节内容

from pyqpanda import *
import numpy as np

# 通过QCloud()创建量子云虚拟机
QCM = QCloud()

# 通过传入当前用户的token来初始化
QCM.init_qvm("608e020100301006072a8648ce3d020106052b8104001c041730150201010410634a5b6d0a2a9a2b03b9d7c17c57405f/13082")

然后是构建量子线路,对于需要采样测量的量子线路需要插入测量节点

qlist = QCM.qAlloc_many(6)
clist = QCM.cAlloc_many(6)

measure_prog = QProg()
measure_prog << hadamard_circuit(qlist)\
             << CZ(qlist[1], qlist[5])\
             << Measure(qlist[0], clist[0])\
             << Measure(qlist[1], clist[1])

pmeasure_prog = QProg()
pmeasure_prog << hadamard_circuit(qlist)\
              << CZ(qlist[1], qlist[5])\
              << RX(qlist[2], np.pi / 4)\
              << RX(qlist[1], np.pi / 4)\

接下来就是提交计算任务和获取结果:

  • full_amplitude_measure(全振幅蒙特卡洛测量操作)

    result0 = QCM.full_amplitude_measure(measure_prog, 100)
    print(result0)
    

    需要传入的第二个参数是测量次数,输出结果如下,左侧是量子态的二进制表示,右边表示测量次数对应的概率:

    {'00': 0.263,
     '01': 0.255,
     '10': 0.241,
     '11': 0.241}
    
  • full_amplitude_pmeasure(全振幅概率测量操作)

    result1 = QCM.full_amplitude_pmeasure(pmeasure_prog, [0, 1, 2])
    print(result1)
    

    需要传入的第二个参数是测量的比特,输出结果如下,左侧是量子态的二进制表示,右边表示测量对应的概率:

    {'000': 0.12499999999999988,
     '001': 0.12499999999999988,
     '010': 0.12499999999999988,
     '011': 0.12499999999999988,
     '100': 0.12499999999999988,
     '101': 0.12499999999999988,
     '110': 0.12499999999999988,
     '111': 0.12499999999999988}
    
  • partial_amplitude_pmeasure(部分振幅概率测量操作)

    result2 = QCM.partial_amplitude_pmeasure(pmeasure_prog, ["0", "1", "2"])
    print(result2)
    

    需要传入的第二个参数是测量的量子态振幅的十进制表示,输出结果如下,左侧是量子态振幅的十进制表示,右边表示复数形式的振幅值:

    {'0': (0.08838832192122936-0.08838833495974541j),
     '1': (0.08838832192122936-0.08838833495974541j),
     '2': (0.08838832192122936-0.08838833495974541j)}
    
  • single_amplitude_pmeasure(单振幅概率测量操作)

    result3 = QCM.single_amplitude_pmeasure(pmeasure_prog, "0")
    print(result3)
    

    需要传入的第二个参数是测量的振幅(十进制表示),输出结果如下,只会输出一个量子态对应的复数形式的振幅值:

    (0.08838833056846361-0.08838833850593952j)
    
  • noise_measure(噪声虚拟机测量操作)

    QCM.set_noise_model(NoiseModel.BIT_PHASE_FLIP_OPRATOR, [0.01], [0.02])
    result4 = QCM.noise_measure(measure_prog, 100)
    print(result4)
    

    通过 set_noise_model 设置噪声参数,第一个参数是噪声模型,后面分别是单门噪声参数和双门噪声参数,噪声模型的定义如下:

    enum NOISE_MODEL
    {
        DAMPING_KRAUS_OPERATOR,
        DEPHASING_KRAUS_OPERATOR,
        DECOHERENCE_KRAUS_OPERATOR_P1_P2,
        BITFLIP_KRAUS_OPERATOR,
        DEPOLARIZING_KRAUS_OPERATOR,
        BIT_PHASE_FLIP_OPRATOR,
        PHASE_DAMPING_OPRATOR,
        DECOHERENCE_KRAUS_OPERATOR,
        PAULI_KRAUS_MAP,
        KRAUS_MATRIX_OPRATOR,
        MIXED_UNITARY_OPRATOR,
    };
    

    可以通过pyqpanda的枚举类 NoiseModel 来获取,该接口输出结果如下,左侧是量子态的二进制表示,右边表示测量对应的概率:

    {'00': 0.27,
     '01': 0.22,
     '10': 0.21,
     '11': 0.30}
    

真实芯片计算服务


本源悟空超导芯片

本源悟空 是2024年本源量子正式发布的新一代超导量子计算机,最大运行规模可达72比特,并且在量子计算纠错,运行速度上实现质的飞跃。

对于芯片任务,同样是通过 QCloud 来提交任务和查询计算计算结果。

用户首先需要通过 注册并访问 最新的本源量子云计算官网 本源量子云

然后点击右上键的 工作台 ,进入量子计算访问计算界面,

../_images/2024cloud.png

可以看到有各种计算服务,包括虚拟计算和真实量子计算,接着需要进一步获取 api_token 等相关信息。 api_token 是每个用户用于使用pyqpanda的计算接口访问量子云计算资源的标识符,可以在个人账号中心获取。

../_images/token.png

api_token 是重要的量子计算资源访问凭证,请妥善保管,量子计算任务的提交和查询,需要通过pyqpanda的量子云组件 QCloud ,通过将 api_token 作为 QCloud 的初始化函数 init_qvm 的参数传递,就可以正常使用后续接口,示例如下:

machine = QCloud()
machine.set_configure(72,72);

machine.init_qvm("502e0201003016072ce3d020106052b8101c04150201010410b6d33ad8772eb9705e844394453a3c8a/6327",False)

量子云组件 QCloud 的其他接口介绍如下:

class QCloud(QuantumMachine)

除了用于与远程计算集群交互, QCloud 也可以通过提交真实量子计算机芯片任务并获取结果。

参数:

QuantumMachine (class) -- QuantumMachine类的基类。

变量:

machine (origin quantum cloud) -- 该类用于管理远程量子云计算资源。

__init__()

QCloud类的构造函数。

返回:

无返回值

返回类型:

None

get_state_fidelity(prog, shot, chip_id=2, is_amend=True, is_mapping=True, is_optimization=True, task_name='QPanda Experiment')

该方法将给定的量子线路提交到远程真实量子芯片上进行计算,然后返回计算得到的状态保真度。可以通过调整参数来控制计算的方式和行为。

参数:
  • prog (QProg) -- 要计算状态保真度的量子线路。

  • shot (int) -- 重复运行线路以计算期望值的次数。

  • chip_id (int, optional) -- 远程计算集群上的芯片ID,正确默认为2(本源悟源芯片5号)。

  • is_amend (bool, optional) -- 是否开启读取保真度修正。

  • is_mapping (bool, optional) -- 是否进行电路映射。

  • is_optimization (bool, optional) -- 是否进行优化。

  • task_name (str, optional) -- 任务名称,默认为'QPanda Experiment'。

返回:

计算得到的状态保真度。

返回类型:

float

get_state_tomography_density(prog, shot, chip_id=2, is_amend=True, is_mapping=True, is_optimization=True, task_name='QPanda Experiment')

计算量子线路的qst层析结果。

参数:
  • prog (QProg) -- 要计算态密度矩阵的量子线路。

  • shot (int) -- 重复运行线路以计算期望值的次数。

  • chip_id (int, optional) -- 远程计算集群上的芯片ID,正确默认为2(本源悟源芯片5号)。

  • is_amend (bool, optional) -- 是否开启读取保真度修正。

  • is_mapping (bool, optional) -- 是否进行电路映射。

  • is_optimization (bool, optional) -- 是否进行优化。

  • task_name (str, optional) -- 任务名称,默认为'QPanda Experiment'。

返回:

计算得到的态密度矩阵。

返回类型:

List[List[complex]]

init_qvm(token: str, is_logged: bool = False, use_bin_or_hex: bool = True, enable_pqc_encryption=False, request_time_out: int = 100)

该方法用于初始化 QVM 服务,提供必要的用户身份验证令牌和其他参数。可选参数用于配置 QVM 的行为,例如是否记录操作,以及在处理二进制和十六进制字符串时是否使用默认设置。

参数:
  • token (str) -- 用户身份验证令牌。

  • is_logged (bool, optional) -- 是否在控制台上记录 QVM 操作(默认为 False)。

  • use_bin_or_hex (bool, optional) -- 是否在处理二进制和十六进制字符串时使用默认设置(默认为 True)。

  • enable_pqc_encryption -- 是否启用混合加密算法对数据传输进行加密(默认为 False)

  • request_time_out (int, optional) -- 请求超时时间,以秒为单位(默认为 100)。

real_chip_measure(prog, shot, chip_id=2, is_amend=True, is_mapping=True, is_optimization=True, task_name='QPanda Experiment')

在真实量子计算芯片上进行量子测量。

参数:
  • prog (Union[QProg, str]) -- 要在实际芯片上测量的量子线路。

  • shot (int) -- 重复运行线路以计算期望值的次数。

  • chip_id (int, optional) -- 实际芯片ID,正确默认为2(本源悟源芯片5号)。

  • is_amend (bool, optional) -- 是否开启读取保真度修正,默认为True。

  • is_mapping (bool, optional) -- 是否进行电路映射,默认为True。

  • is_optimization (bool, optional) -- 是否进行优化,默认为True。

  • task_name (str, optional) -- 任务名称,默认为'QPanda Experiment'。

返回:

测量结果字典,包含各个测量结果的概率。

返回类型:

Dict[str, float]

async_real_chip_measure(prog, shot, chip_id=2, is_amend=True, is_mapping=True, is_optimization=True, task_name='QPanda Experiment')

异步在真实量子计算芯片上进行量子测量,后续查询计算结果需要配合query_task_state_result使用

参数:
  • prog (Union[QProg, str]) -- 要在实际芯片上测量的量子线路。

  • shot (int) -- 重复运行线路以计算期望值的次数。

  • chip_id (int, optional) -- 实际芯片ID,默认为2(本源悟源芯片5号)。

  • is_amend (bool, optional) -- 是否开启读取保真度修正,默认为True。

  • is_mapping (bool, optional) -- 是否进行电路映射,默认为True。

  • is_optimization (bool, optional) -- 是否进行优化,默认为True。

  • task_name (str, optional) -- 任务名称,默认为'QPanda Experiment'。

返回:

测量结果字典,包含各个测量结果的概率。

返回类型:

Dict[str, float]

async_batch_real_chip_measure(prog_array, shot, chip_id=real_chip_type.origin_72, is_amend=True, is_mapping=True, is_optimization=True)

在真实量子计算芯片上批量进行量子测量,后续查询计算结果需要配合query_batch_task_state_result使用

参数:
  • prog_array (Union[List[QProg], List[str]]) -- 要执行的量子程序列表。

  • shot (int) -- 每个程序执行的次数(测量次数)。

  • chip_id (real_chip_type, optional) -- 要使用的真实量子芯片的ID,默认为 real_chip_type.origin_72。

  • is_amend (bool, optional) -- 是否对程序执行修正,默认为True。

  • is_mapping (bool, optional) -- 是否进行量子比特映射,默认为True。

  • is_optimization (bool, optional) -- 是否进行门融合优化,默认为True。

返回:

批量任务ID。

返回类型:

str

batch_real_chip_measure(prog_array, shot, chip_id=real_chip_type.origin_72, is_amend=True, is_mapping=True, is_optimization=True)

在真实量子计算芯片上批量进行量子测量。

参数:
  • prog_array (Union[List[QProg], List[str]]) -- 要执行的量子程序列表。

  • shot (int) -- 每个程序执行的次数(测量次数)。

  • chip_id (real_chip_type, optional) -- 要使用的真实量子芯片的ID,默认为 real_chip_type.origin_72。

  • is_amend (bool, optional) -- 是否对程序执行修正,默认为True。

  • is_mapping (bool, optional) -- 是否进行量子比特映射,默认为True。

  • is_optimization (bool, optional) -- 是否进行门融合优化,默认为True。

返回:

包含每个程序测量结果概率的字典列表。

返回类型:

List[Dict[str, float]]

query_task_state_result(task_id: str)

该方法用于查询单个任务的状态和结果。如果任务成功完成,结果列表将包含任务状态和相应的测量结果或其他相关信息。

参数:

task_id (str) -- 要查询的任务ID。

返回:

包含任务状态和结果的列表。如果任务成功完成,结果将包含状态和相应的测量结果或其他相关信息。

返回类型:

List[Union[int, Any]]

query_batch_task_state_result(task_id: str)

该方法用于查询批量任务的状态和结果。如果批量任务成功完成,结果列表将包含任务状态和相应的测量结果或其他相关信息。

参数:

task_id (str) -- 要查询的批量任务ID。

返回:

包含任务状态和结果的列表。如果批量任务成功完成,结果将包含状态和相应的测量结果或其他相关信息。

返回类型:

List[Union[int, List[Any]]]

通过量子云平台向本源悟源请求计算任务的完整代码流程如下:

from pyqpanda import *

# 通过QCloud()创建量子云虚拟机
qm = QCloud()

# 通过传入当前用户的token来初始化,需要确保当前用户有足够算力资源
qm.init_qvm("302e02010001006072a8648ce3d020106052b810400104173015020100410634a5b6d0a2a9a2b03b9d7c17c57405f/13082")

qlist = qm.qAlloc_many(6)
clist = qm.cAlloc_many(6)

# 构建量子程序,可以手动输入,也可以来自OriginIR或QASM语法文件等
prog = QProg()
prog << hadamard_circuit(qlist)\
    << CZ(qlist[1], qlist[5])\
    << Measure(qlist[0], clist[0])\
    << Measure(qlist[1], clist[1])

# 调用真实芯片计算接口,至少需要量子程序和测量次数两个参数
result = qm.real_chip_measure(prog, 1000, real_chip_type.origin_72)
print(result)
qm.finalize()

real_chip_type.origin_72 表示使用最新的悟空72比特芯片

在使用本源真实芯片计算服务时,经常会遇到各种错误,下面给出部分错误信息,可以根据抛出的错误异常信息进行对号入座。

  • server connection failed :该异常表示服务器宕机或与服务器连接失败

  • api key error :该异常表示用户的API-Key参数异常,请去官网确认个人资料的信息

  • un-activate products or lack of computing power :该异常表示用户未开通该产品或算力不足

  • build system error :该异常表示编译系统运行出错

  • exceeding maximum timing sequence :该异常表示量子程序时序过长

  • unknown task status :其他任务状态异常的情况

除了蒙特卡洛测量接口之外,还有用于获取 量子态qst层析 结果和 保真度 接口,下面逐一介绍:

  • 获取量子态qst层析结果接口: get_state_tomography_density ,使用示例如下:

from pyqpanda import *
PI=3.14159

qm = QCloud()
qm.set_configure(72,72);

qm.init_qvm("302e020100301006072a88ce3d020106052b81040041730150201010410b6d33ad87729705e844394453a3c8a/65327",True)

q = qm.qAlloc_many(6)
c = qm.cAlloc_many(6)

prog = QProg()
prog << hadamard_circuit(q)\
    << RX(q[1], PI / 4)\
    << RX(q[2], PI / 4)\
    << RX(q[1], PI / 4)\
    << CZ(q[0], q[1])\
    << CZ(q[1], q[2])\
    << Measure(q[0], c[0])\
    << Measure(q[1], c[1])

result = qm.get_state_tomography_density(prog, 1000,real_chip_type.origin_72)
print(result)
qm.finalize()

输出结果是测量的两比特的QST层析结果,参考结果如下

[[(0.2595032944754182+0j), (0.21819564115560064+0.01368474404460212j), (0.0010136847440446045-0.008616320324379118j), (0.020273694880892028+0.01951343132285857j)],
[(0.21819564115560064-0.01368474404460212j), (0.26001013684744045+0j), (0.000760263558033443+0.011657374556512917j), (-0.008362899138367963+0.010897110998479481j)],
[(0.0010136847440446045+0.008616320324379118j), (0.000760263558033443-0.011657374556512917j), (0.2554485554992397+0j), (-0.21490116573745568+0.012417638114546374j)],
[(0.020273694880892028-0.01951343132285857j), (-0.008362899138367963-0.010897110998479481j), (-0.21490116573745568-0.012417638114546374j), (0.22503801317790167+0j)]]
  • 获取量子态保真度接口: get_state_fidelity ,使用示例如下:

from pyqpanda import *
PI=3.14159

qm = QCloud()
qm.set_configure(72,72);

qm.init_qvm("302e020100301006072a868ce3d02006052b8104001c041730502010424100b6d33ad8772eb9705e844394453a3c8a/16327",True)

q = qm.qAlloc_many(6)
c = qm.cAlloc_many(6)

prog = QProg()
prog << hadamard_circuit(q)\
    << RX(q[1], PI / 4)\
    << RX(q[2], PI / 4)\
    << RX(q[1], PI / 4)\
    << CZ(q[0], q[1])\
    << CZ(q[1], q[2])\
    << Measure(q[0], c[0])\
    << Measure(q[1], c[1])

result = qm.get_state_fidelity(prog, 1000,real_chip_type.origin_72)
print(result)
qm.finalize()

输出结果是保真度,参考结果如下

0.928951

同时支持批量任务提交接口,分为**同步**和**异步**两种:

  • 1.同步批量任务提交接口:batch_real_chip_measure 接口会一直等待结果返回,使用示例如下:

from pyqpanda import *

machine = QCloud()
machine.set_configure(72,72);

# XXX替换为实际用户api_token,可以从本源量子计算官网 https://qcloud.originqc.com.cn/ 获取
machine.init_qvm("XXX", False)

qlist = machine.qAlloc_many(6)
clist = machine.cAlloc_many(6)

measure_prog = QProg()
measure_prog << H(qlist[0])\
            << CNOT(qlist[0], qlist[1])\
            << CNOT(qlist[1], qlist[2])\
            << Measure(qlist[0], clist[0])\
            << Measure(qlist[1], clist[1])\
            << Measure(qlist[2], clist[2])

batch_prog = [measure_prog for _ in range (6)]

pmeasure_prog = QProg()
pmeasure_prog << H(qlist[0])\
            << CNOT(qlist[0], qlist[1])\
            << CNOT(qlist[1], qlist[2])

originir_list = [convert_qprog_to_originir(prog, machine) for prog in batch_prog]

real_chip_measure_batch_result = machine.batch_real_chip_measure(batch_prog, 1000, real_chip_type.origin_72)
originir_list_result = machine.batch_real_chip_measure(originir_list, 1000, real_chip_type.origin_72)

batch_real_chip_measure 同时支持List[QProg]和List[originir_str]两种参数方式。

  • 2.异步批量任务提交接口:async_batch_real_chip_measure 接口会一直等待结果返回,使用示例如下:

    from pyqpanda import *
    
    machine = QCloud()
    machine.set_configure(72,72);
    
    machine.init_qvm("XXX",True)
    
    qlist = machine.qAlloc_many(6)
    clist = machine.cAlloc_many(6)
    
    measure_prog = QProg()
    measure_prog << hadamard_circuit(qlist)\
                << CZ(qlist[0], qlist[1])\
                << Measure(qlist[0], clist[0])\
                << Measure(qlist[1], clist[1])\
                << Measure(qlist[2], clist[2])
    
    batch_prog = [measure_prog for _ in range (6)]
    
    pmeasure_prog = QProg()
    pmeasure_prog  << hadamard_circuit(qlist)\
                << CZ(qlist[0], qlist[1])
    
    originir_list = [convert_qprog_to_originir(prog, machine) for prog in batch_prog]
    
    batch_id = machine.async_batch_real_chip_measure(originir_list, 1000, real_chip_type.origin_72)
    print(batch_id) # example : '8C3C5BDDA616E1A094B76A85473F3557'
    
    import time
    while(True):
        state, result = machine.query_batch_task_state_result(batch_id)
    
        time.sleep(2)
        if(state == QCloud.TaskStatus.FINISHED.value):
            break
    
    print(state, result)
    

    batch_real_chip_measure 也是同时支持List[QProg]和List[originir_str]两种参数方式,需要配合 query_batch_task_state_result 使用,该接口返回的是元组类型,包含任务状态和结果。

备注

  • 一次批量计算任务的数量最大上限是 200 ,超过这个数值需要拆分成多次提交。

  • 使用前需要确保用户已经开通相关权限,并且有足够的算力资源,否则会出现没有权限或者计算资源不足等出错信息。详见 https://qcloud.originqc.com.cn/zh/computerServices

  • 在使用时遇到任何问题,请给我们提交 用户反馈 ,我们看到后会尽快解决你的问题。