# Automation Professionals' Integration Toolkit Module

**URL:** <https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934>\
**Category:** 3rd Party Modules\
**Tags:** perspective, ignition81, ignition83, vision, scripting\
**Created:** [June 13, 2023, 12:42am UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934 "2023-06-13T00:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 68

<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:** [August 16, 2023, 10:33pm UTC](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934/68 "2023-08-16T22:33:35Z")

</div>

I don't know all the details of `tag()`'s problems, but I suspect there are two key contributors:

- `tag()` startup tries to supply a proper initial value, with a 1-second timeout, on startup everywhere it is used. Use a hundred `tag()` calls in the bindings on a Vision template or window and you can block your UI for up to a hundred seconds, looks like. Not sure how Perspective's parallelism fits here, but you'll either tie up a thread for a hundred seconds, or tie up a hundred threads from the Perspective pool, or somewhere in between. My `tags()` function deliberately does not attempt to do this. (Indirect tag bindings don't do this, either.)

- Every `tag()` expression function is in its own little world, and will trigger expression re-execution where it is used, whenever a new value shows up. If you have twenty tag changes for twenty `tag()` functions, you will get about twenty re-executions. With my `tags()` function, if twenty of the tags get new values within the configured timing window, you get one re-execution.

On top of that, I am offering a "one-shot" non-subscription mode that functions like a large list supplied to `system.tag.readBlocking()`. Without the jython overhead.

---

_[View the full topic](https://forum.inductiveautomation.com/t/automation-professionals-integration-toolkit-module/74934)._
