# 常见问题

(faq/disconnect)=

## 如何断开与 OpticStudio 的连接？

您可以使用`zos.disconnect`断开与 OpticStudio 的连接：

{emphasize-lines="8,9"}

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect("extension")

# Do work ...

# Disconnect
zos.disconnect()
```

如果您以扩展模式连接，这将关闭连接，但保持OpticStudio处于打开状态。如果您以独立模式连接，这将停止独立的OpticStudio实例。在脚本结束时，无需断开连接；当Python终止时会自动处理。

(常见问题/重新连接)=

## 如何重新连接到 OpticStudio？

:::{attention} 以下信息仅适用于v2.0.0之前的ZOSPy版本。请参阅[](usage/01_connection.md#reconnecting-to-opticstudio)如果您使用的是 ZOSPy v2.0.0 或更高版本。:::

您可以通过先[断开连接](faq/disconnect)，然后创建与OpticStudio的新连接来执行此操作。请注意，无需创建新的[`ZOS`](zospy.zpcore.ZOS)实例。这样做会引发错误，因为[只允许一个ZOS实例](faq/single-zos-instance)。

例如，下面这个方法是行不通的：

{emphasize-lines="11,12"}

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect("extension")

# Do work ...

# Disconnect
zos.disconnect()

# Try to create a second connection to the ZOS-API
zos = zp.ZOS()  # ValueError: Cannot have more than one active ZOS instance

oss = zos.connect("extension")
```

但这确实有效：

{emphasize-lines="11,12"}

```python
import zospy as zp

zos = zp.ZOS()
oss = zos.connect("extension")

# Do work ...

# Disconnect
zos.disconnect()

# Create a new connection
oss = zos.connect("extension")
```

(常见问题/single-zos-instance)= {#single-zos-instance}

## 为什么我会收到`ValueError: Cannot have more than one active ZOS instance` ？

:::{attention} 
以下信息仅适用于 v2.0.0 之前的ZOSPy版本。如果您使用的是ZOSPy v2.0.0 或更高版本，请参阅[ZOS管理与ZOS-API的连接](usage/01_connection.md#zos-manages-the-connection-with-the-zos-api)。:::  

如果之前已创建另一个实例，则在创建新的[`ZOS`](zospy.zpcore.ZOS)实例时将引发此错误。ZOS-API仅支持每个进程一个连接，这反映在ZOSPy中，仅允许[`ZOS`](zospy.zpcore.ZOS)类的一个实例。

[`ZOS`](zospy.zpcore.ZOS)类管理ZOS-API连接。关闭与OpticStudio的连接不会关闭与ZOS-API的连接。因此，您只需要此类的一个实例。例如，如果您尝试[重新连接到 OpticStudio](faq/reconnect) ，则可以重复使用此实例。

:::{dropdown} 为什么OpticStudio示例代码不会引发此错误？OpticStudioo示例代码表明可以创建第二个ZOS-API连接，但事实并非如此。如果您尝试创建第二个连接， `ZOSAPI_NetHelper`将不会创建第二个连接，而是默默返回对现有连接的引用。这可能会导致错误（例如，因为您假设您创建了与空OpticStudio实例的第二个连接），这就是我们选择引发错误而不是默默返回现有`ZOS`实例的原因。 :::
