我使用以下代码从C#调用python:
if (!PythonEngine.IsInitialized)
{
PythonEngine.Initialize();
PythonEngine.BeginAllowThreads();
}
//var pythonScriptCommand = string.Format("{0}", Path.Combine(AppContext.BaseDirectory, "scripts" + Path.DirectorySeparatorChar + "keyringtest.py")); //Path.Combine(AppContext.BaseDirectory, "PythonSampleSystemDiagnostic.py");
IntPtr gs = PythonEngine.AcquireLock();
using (PyScope scope = Py.CreateScope())
{
//foreach (var array in myCommand.Settings)
//{
// Console.WriteLine(string.Join(" ", array)); ;
//}
string fileContent = File.ReadAllText(Path.Combine(@"../../Source/AMD.Agent.Standard.DataExchange/Commands/PythonScripts/", ScriptName));
var file = PythonEngine.Compile(fileContent);
scope.Execute(file);
//dynamic accessToken = scope.Get("get_access_token");
dynamic dataExtract = scope.Get("get_result_http");
//_logger.Info(myCommand.Settings.ToString() + "123123123123");
var dict = myCommand.Settings.ToDictionary(x => x.SettingName, x => x.SettingValue);
var dict123 = JsonConvert.SerializeObject(dict);
dataExtract(token,url1,"PerformanceHistoryPeriod");
//Console.WriteLine(_apxApiService + "123123123123123");
}
PythonEngine.ReleaseLock(gs);
PythonEngine.Shutdown();引用此链接:https://mail.python.org/pipermail/pythondotnet/2010-December/001058.html
我不知道这是如何工作的,如果我在不同的线程中多次调用这段代码,那么所有的脚本执行都是并行运行的,还是根据锁依次运行。
发布于 2022-04-07 00:40:36
我不认为您可以同时执行多个线程与Python.NET,因为全局解释器锁。您仍然可以在单独的线程中执行python代码,但不能同时执行多个线程(至少现在是这样)。
另一种方法是使用IronPython,它提供了Python2语法的.NET实现--它可以很好地在多个线程中执行代码。
您可以在这里阅读更多关于使用Python.NET与IronPython的利弊的信息:
https://www.alternetsoft.com/blog/python-net-iron-python-scripting
https://stackoverflow.com/questions/71760020
复制相似问题