У меня есть «класс сценария» в IronPython, а скриптинг в моем приложении работает, вызывая методы на его экземпляре. Мне нужно реализовать сценарии вызова из нескольких потоков. Каков правильный способ сделать это?Многопоточность в IronPython
У меня есть несколько проблем:
Is
ScriptScope
потокобезопасной? Информация противоречива. ScriptScope's documentation says: «ScriptScope не является потокобезопасным. Хост должен либо блокироваться, когда несколько потоков могут обращаться к одному модулю, либо сделать копию для каждого потока». Однако IronRuby использует те же DLR и @JimmySchementi says, что «ScriptRuntime, ScriptEngine и ScriptScope - все поточно-безопасные, предназначенные для использования между потоками. В частности, ScriptScope использует потокобезопасное хранилище данных, поэтому ScriptScope можно разделить между потоками «.Если я создаю несколько
ScriptScope
s, это будет означать выполнение одного и того же сценария инициализации несколько раз. Предположим, что я запускаю десять файлов сценариев Python, импортирую пять сборок и в целом выполняю совсем немного кода, чтобы получить «объект сценария». Есть ли способ избежать затрат времени и памяти на запуск большого количества одного и того же кода для каждого потока?ли сделать
ScriptScope
переменная нить статическим (то есть, применяяThreadStaticAttribute
) и выполнение инициализации для каждого потока, который утилизируетсяTask.Run
путем? Или я должен использоватьTaskScheduler
с лимитом параллелизма, потому что стоимость нескольких областей высока?
В целом: , как правильно реализовать работает один и тот же сценарий, по разным аргументам в несколько потоков? Скрипты должны выполняться одновременно и не должны вылетать из-за условий гонки.
Я чувствую к вам. Я обнаружил, что документация на Ironpthon и Ironruby отсутствует во всех аспектах, так как Microsoft прекратила официально поддерживать ее. –