# Too many tags in readBlocking?

**URL:** <https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803>\
**Category:** Ignition\
**Created:** [November 10, 2026, 4:18pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803 "2026-11-10T16:18:50Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![son122](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@son122](https://forum.inductiveautomation.com/u/son122)\
**Post date:** [November 10, 2026, 4:18pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/1 "2026-11-10T16:18:50Z")

</div>

Is there a limit of how many tags in a single system.tag.readBlocking? If so, I think I might have reached it. The error I'm getting is: "java.util.concurrent.TimeoutException: null"

I'm trying to read 2.2 million tags. What's the tag limit? How many is too many for such a call?

```python
tagPaths = [] #100K tags
columns = ['Enabled', 'TagType', 'DataType', 'AccessRights', 'Documentation', 'Tooltip', 'EngUnit', 'EngHigh', 'EngLow', 'EngLimitMode', 'ScanClass', 'Deadband', 'DeadbandMode', 'HistoryEnabled', 'HistoricalScanclass', 'HistoricalDeadband', 'HistoricalDeadbandMode', 'HistoryMaxAge', 'HistoryMaxAgeMode', 'InterpolationMode', 'OpcItemPath', 'OpcServer']
qvs = system.tag.readBlocking(['%s.%s' % (tagPath, column) for tagPath in tagPaths for column in self.columns])
# 100K tags * 22 columns

```

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 10, 2026, 4:34pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/2 "2026-11-10T16:34:15Z")

</div>

There's no _ **explicit** _ quantity limit, but I'm gonna guess you've hit a practical limit. Unless you are trying to do this from the designer or a Vision client, in which case you've probably hit the 60 second timeout on traffic between designer/client and the gateway.

---

<div class="post-metadata">

**Author:** ![JordanCClark](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/jordancclark/32/83362_2.png) [@JordanCClark](https://forum.inductiveautomation.com/u/JordanCClark)\
**Post date:** [November 10, 2026, 4:46pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/3 "2026-11-10T16:46:07Z")

</div>

With trying to read 2.2 million qualified values, that gives you 6.6 milliion points of data.  
Have you tried using [`system.tag.getConfiguration()`](https://www.docs.inductiveautomation.com/docs/8.3/appendix/scripting-functions/system-tag/system-tag-getConfiguration)

---

<div class="post-metadata">

**Author:** ![son122](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@son122](https://forum.inductiveautomation.com/u/son122)\
**Post date:** [November 10, 2026, 5:06pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/4 "2026-11-10T17:06:16Z")

</div>

system.tag.getConfiguration is too slow for what I need. It takes only 1 base path, but I need a list of tags.

---

<div class="post-metadata">

**Author:** ![son122](https://avatars.discourse-cdn.com/v4/letter/s/3be4f8/32.png) [@son122](https://forum.inductiveautomation.com/u/son122)\
**Post date:** [November 10, 2026, 5:15pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/5 "2026-11-10T17:15:44Z")

</div>

It is running this from the gateway script. This is the error on the log.

```plaintext
Scripting[system_util_tag]	09Nov2026 21:58:15	Error during blocking read of tags through scripting.
java.util.concurrent.TimeoutException: null

at java.base/java.util.concurrent.CompletableFuture.timedGet(Unknown Source)

at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)

at com.inductiveautomation.ignition.gateway.script.GatewayTagUtilities.readBlockingImpl(GatewayTagUtilities.java:246)

at com.inductiveautomation.ignition.common.script.builtin.AbstractTagUtilities.readBlocking(AbstractTagUtilities.java:510)

at jdk.internal.reflect.GeneratedMethodAccessor90.invoke(Unknown Source)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.base/java.lang.reflect.Method.invoke(Unknown Source)

at org.python.core.PyReflectedFunction. __call__ (PyReflectedFunction.java:190)

at com.inductiveautomation.ignition.common.script.ScriptManager$ReflectedInstanceFunction. __call__ (ScriptManager.java:553)

at org.python.core.PyObject. __call__ (PyObject.java:461)

at org.python.core.PyObject. __call__ (PyObject.java:465)

at org.python.pycode._pyx266356.export$7(:97)

at org.python.pycode._pyx266356.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyBaseCode.call(PyBaseCode.java:168)

at org.python.core.PyFunction. __call__ (PyFunction.java:437)

at org.python.core.PyMethod. __call__ (PyMethod.java:156)

at org.python.pycode._pyx266352.cache_tags$18(:548)

at org.python.pycode._pyx266352.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyBaseCode.call(PyBaseCode.java:187)

at org.python.core.PyFunction. __call__ (PyFunction.java:449)

at org.python.core.PyMethod. __call__ (PyMethod.java:171)

at org.python.pycode._pyx266352.cache_provider_configs$15(:486)

at org.python.pycode._pyx266352.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyBaseCode.call(PyBaseCode.java:306)

at org.python.core.PyBaseCode.call(PyBaseCode.java:158)

at org.python.core.PyFunction. __call__ (PyFunction.java:437)

at org.python.core.PyMethod. __call__ (PyMethod.java:156)

at org.python.pycode._pyx266370.handleMessage$1(:10)

at org.python.pycode._pyx266370.call_function()

at org.python.core.PyTableCode.call(PyTableCode.java:173)

at org.python.core.PyBaseCode.call(PyBaseCode.java:306)

at org.python.core.PyFunction.function ___call__ (PyFunction.java:474)

at org.python.core.PyFunction. __call__ (PyFunction.java:469)

at org.python.core.PyFunction. __call__ (PyFunction.java:464)

at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:847)

at com.inductiveautomation.ignition.common.script.ScriptManager.runFunction(ScriptManager.java:829)

at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle$TrackingProjectScriptManager.runFunction(ProjectScriptLifecycle.java:868)

at com.inductiveautomation.ignition.common.script.message.MessageHandlerRunnable.run(MessageHandlerRunnable.java:121)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

```

If there is a limit, it would be nice to know what that is, so I can slice the list of tagpaths into a smaller list.

---

<div class="post-metadata">

**Author:** ![Greyship](https://avatars.discourse-cdn.com/v4/letter/g/898d66/32.png) [@Greyship](https://forum.inductiveautomation.com/u/Greyship)\
**Post date:** [November 10, 2026, 5:31pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/6 "2026-11-10T17:31:27Z")

</div>

You've hit a timeout, so as PTurmel says, there is no "limit", however depending on hardware this will take too long and hit a timeout limit. We can't answer the value of how many to batch this down to because it is very dependent on your hardware/network. Running this on a Raspberry Pi or a datacenter cluster will give very different results. 2.2 million tags might be OK for a cluster, but 1000 tags may be too much for a RPi.

What you will have to do is testing on your side to determine how many tags you can read without overloading your network/server, then add in some margin and set that as your batching value (and gracefully handle any Timeout's with a retry on smaller batches).

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 10, 2026, 8:57pm UTC](https://forum.inductiveautomation.com/t/too-many-tags-in-readblocking/117803/7 "2026-11-10T20:57:39Z")

</div>

> [@son122](#):
>
> I'm trying to read 2.2 million tags.

Dare I ask...why?

What's the Y problem you're trying to solve with this X task statement?

> **[XY problem](https://en.wikipedia.org/wiki/XY_problem)**
>
> The XY problem is a communication problem encountered in help desk, technical support, software engineering, or customer service situations where the question is about an end user's attempted solution (X) rather than the root problem itself (Y). The XY problem obscures the real issues and may even introduce secondary problems that lead to miscommunication, resource mismanagement, and sub-par solutions. The solution for the support personnel is to ask probing questions as to why the information is...
