我在 IronPython 中有一个“脚本类”,我的应用程序中的脚本通过调用其实例上的方法来工作。我需要从多个线程实现调用脚本。正确的方法是什么?
我有多个担忧:
ScriptScope
线程安全吗?信息是矛盾的。ScriptScope 的文档说:“ScriptScope 不是线程安全的。当多个线程可以访问同一个模块时,主机应该锁定,或者应该为每个线程制作一个副本。” 但是,IronRuby 使用相同的 DLR,@JimmySchementi 说“ ScriptRuntime、ScriptEngine 和 ScriptScope 都是线程安全的,旨在用于线程之间。具体来说,ScriptScope 使用线程安全的数据存储,因此 ScriptScope 可以在线程之间共享。”如果我创建多个
ScriptScope
s,那将意味着多次执行相同的初始化脚本。假设我运行了 10 个 Python 脚本文件,导入了 5 个程序集,并且总体上执行了相当多的代码来准备好“脚本对象”。有什么方法可以避免为每个线程运行大量相同的代码所花费的时间和内存成本?是否使
ScriptScope
变量线程静态(即应用ThreadStaticAttribute
)并为要使用的每个线程执行初始化Task.Run
?或者我应该使用TaskScheduler
具有并发限制的 a,因为多个范围的成本很高?
总体而言:如何正确实现在多个线程中对不同参数运行相同的脚本?脚本必须同时执行,并且不得因竞争条件而崩溃。