C# 从dotnet(python.NET)取消python函数

C# 从dotnet(python.NET)取消python函数,c#,python.net,C#,Python.net,我正在使用Python.NET调用EasyOCR Python库。根据上下文的不同,检测可能会很慢(从30秒到几分钟),我的用户执行的某些操作可能会导致任务取消。据我所知,取消令牌只会在下一条C#指令中取消任务,因此在python代码运行时我被卡住了 我已经看到在Python端使用asyncio有一些类似的机制,但我想知道是否有任何方法可以通过某种方式“杀死”Python进程来避免额外Python逻辑的复杂性。或者可以通过某种简单的方式共享令牌。最近,Python.NET中添加了一个与您要求的功

我正在使用Python.NET调用EasyOCR Python库。根据上下文的不同,检测可能会很慢(从30秒到几分钟),我的用户执行的某些操作可能会导致任务取消。据我所知,取消令牌只会在下一条C#指令中取消任务,因此在python代码运行时我被卡住了


我已经看到在Python端使用asyncio有一些类似的机制,但我想知道是否有任何方法可以通过某种方式“杀死”Python进程来避免额外Python逻辑的复杂性。或者可以通过某种简单的方式共享令牌。

最近,Python.NET中添加了一个与您要求的功能非常类似的功能(您可能需要使用3.0预览,但它可能没有进入2.5版)

这是为特性添加的测试代码。我认为这是您能够获得的最佳参考:


还要注意
设置
方法。它显示了如何正确设置多线程。

没有好的方法中止不合作的线程/任务。存在Thread.Abort,但使用它是一个错误。你的选择多少有些不同

  • 找出将取消请求转发给python代码的方法
  • 取消任务时停止等待结果,但让任务继续在后台运行
  • 在单独的进程中运行该任务,并在取消时终止该进程
  • 不允许取消任务

  • 谢谢你@JonasH。我已经考虑过这些选择,因为这很复杂,但我有办法。对于#2来说,这项任务太过资源密集,不能忽略。对于第3,我没有考虑这个问题,我会去的。对于#4,也不是一个选项(类似于#2)。知道v3的ETA吗?和此相关的问题是,您认为在一个小型产品环境中进行此预览有多大风险(您是否看到许多潜在风险的PRs被合并?API是否可能在现在和发布之间发生剧烈变化?)预计将在2021年底完成。如果你想保持预览的更新,这在此刻是相当危险的。