提问人:muhmuhhum 提问时间:11/8/2023 更新时间:11/10/2023 访问量:19
Pythonnet 消息处理中的多个 python 实例
Pythonnet Multiple python instances in message handling
问:
我有一个处理消息的 c# 应用程序,需要为收到的每条消息调用 python 代码。但是,如果我并行运行处理,我的 docker 容器会死掉并显示 139 退出代码。如何在单独的 python 上下文中运行每个方法的 python 代码?
消息处理程序:
public class ProcessingConsumer : IConsumer<DumbClassOne>
{
private readonly ILogger<ProcessingConsumer> _logger;
public ProcessingConsumer(ILogger<ProcessingConsumer> logger)
{
_logger = logger;
}
public Task Consume(ConsumeContext<DumbClassOne> context)
{
_logger.LogInformation("---Handling event----");
using (new PythonEngine())
{
using (Py.GIL())
{
using (var scope = Py.CreateScope(Guid.NewGuid().ToString()))
{
dynamic py = scope;
py.Exec(System.IO.File.ReadAllText("run.py"));
// Redirect Python logs to .NET Core logger
dynamic pythonLogger = py.logger;
dynamic handler = new DotNetLogHandler(_logger);
pythonLogger.addHandler(handler);
py.log_something();
pythonLogger.removeHandler(handler);
Thread.Sleep(200);
}
}
}
return Task.CompletedTask;
}
}
答:
0赞
LOST
11/10/2023
#1
只是不要每次都创造。在程序启动时创建一次。在没有迫切需要的情况下一直关闭它不是一个好主意,无论如何一次只支持 1 个实例。PythonEngine
评论
0赞
muhmuhhum
11/10/2023
好的,谢谢答案。所以没有办法为每条消息获取单独的 python 实例?
0赞
LOST
11/11/2023
@muhmuhhum为什么需要一个单独的 Python 实例?最好的方法可能是开始一个新的过程。
评论