我们有一个.NET Windows服务,以事务方式从A到B挖掘大量高度关键数据.我们还需要确保服务中使用的所有外部组件都未正确分配,并在关闭服务本身之前清除所有内容.这可能需要几个小时!原因是服务需要等待外部组件的回调,该回调在2,3或4小时后到达.
- Windows可以等待这么长时间才能使服务正常关闭吗?
- 在服务中有哪些选项我可以指示当操作系统关闭服务时会发生什么,例如完全阻止关闭?
- 另外,作为另一种情况,如果服务器需要重启会发生什么?可以等几个小时的服务吗?
- 操作系统在杀死服务之前等待服务的时间有多长?
.net 4.5,asp.net mvc:从ASP.NET应用程序运行持久进程(1-2分钟)的最佳方法是什么,它应该在单线程环境中运行,我的意思是该进程是为了一次只有一个用户,所有其他用户的执行必须等到当前执行完毕?方案如下:用户单击按钮运行某种持久计算,http响应立即返回给用户,然后用户必须手动请求单独请求的计算状态.Asp.net http会话流产不应该导致流程终止,它应该继续下去.该进程可以在相同或单独的服务器上运行.
即使应用程序在后台进行,我也有一些长时间运行的进程.我正在调用应用程序的beginBackgroundTaskWithExpirationHandler:方法,在expirationBlock中我正在调用应用程序endBackgroundTask.这是实施:
__block UIBackgroundTaskIdentifier task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:task];
task = UIBackgroundTaskInvalid;
}];
dispatch_queue_t queue = dispatch_queue_create("com.test.test1234", DISPATCH_QUEUE_SERIAL);
dispatch_async(queue, ^{
// My Task goes here
});
Run Code Online (Sandbox Code Playgroud)
在某些情况下,我的串行队列有更多要执行的任务,这些任务无法在系统提供的时间内完成.因此,到期块将执行,并且我将结束UIBackgroundTaskIdentifier但不停止调度过程(我甚至无法取消调度).
Apple的文件说:
每次调用beginBackgroundTaskWithName:expirationHandler:或beginBackgroundTaskWithExpirationHandler:方法都会生成一个唯一的令牌以与相应的任务相关联.当您的应用程序完成任务时,它必须使用相应的令牌调用endBackgroundTask:方法,以让系统知道任务已完成.未能为后台任务调用endBackgroundTask:方法将导致应用程序终止.如果在启动任务时提供了过期处理程序,系统将调用该处理程序并为您提供最后一次结束任务并避免终止的机会.
所以,根据这个,如果我不打电话,endBackgroundTask:我的应用程序将被终止,这是好的.
我的问题是:对于我当前的实现,如果我调用endBackgroundTask:expirationHandler块并且我的调度队列的任务没有完成,该怎么办?我的应用程序将被终止或将被暂停?
谢谢
我需要一个控制器操作:
前两点很简单,我用AuthGuardthen class-validator。但我不知道如何返回 HTTP 响应然后继续处理。
由于请求由一系列(可能是长时间运行的)任务组成,我想到了使用拦截器使用 RxJS 来观察任务的状态并在任务完成后调用外部 PI。但是,我没有使用 RxJS 或拦截器(不是这种方式)的经验,所以我真的不知道如何让拦截器的进程运行,但立即将控制权传递给控制器的操作。
另外,也许还有另一种更好的方法?没有拦截器,只是把所有的流程逻辑放在控制器中?还有其他选择吗?
javascript asynchronous long-running-processes node.js nestjs
我有一个 Google Cloud PubSub 主题,它有时会收到数千条消息,有时会收到零条消息。这些消息代表的任务每个可能需要一个小时以上。我最好能够为此使用 Cloud Run,因为它可以很好地满足需求,如果发布了 1000 条消息,我希望有 100 个 Cloud Run 实例启动。这些 Run 实例通过推送订阅启动。问题是 PubSub 有 600 秒的确认超时。这意味着为了让 Cloud Run 处理这些消息,它们必须在 600 秒内完成。如果没有,PubSub 超时,然后再次发送,导致任务重新启动,直到第一个任务最终确认它(这会导致同一个任务多次运行)。Cloud Run 通过返回 2** HTTP 状态代码来确认消息。该文件指出
当 Cloud Run 上运行的应用完成处理请求时,容器实例对 CPU 的访问将被禁用或受到严重限制。因此,您不应启动在请求处理程序范围之外运行的后台线程或例程。
那么是否有可能通过代码确认 PubSub 请求并继续处理,而无需 Google Cloud Run 移交资源?还是有我不知道的更好的解决方案?
因为这些过程是代码/资源密集型的,所以我觉得 Cloud Functions 是不够的。我看过https://cloud.google.com/solutions/using-cloud-pub-sub-long-running-tasks和https://cloud.google.com/blog/products/gcp/how-google -cloud-pubsub-supports-long-running-workloads。但这些都没有回答我的问题。我看过谷歌云任务,这可能是什么?但是项目的其余部分是围绕 PubSub/Run/Functions 构建的,所以我最好坚持下去。
这个项目是用 Python 编写的。所以最好我想像这样编写我的 Google Cloud Run 任务:
@app.route('/', methods=['POST'])
def index():
"""Endpoint for Google Cloud PubSub messages"""
pubsub_message = request.get_json()
logger.info(f'Received PubSub pubsub_message {pubsub_message}')
if …Run Code Online (Sandbox Code Playgroud) long-running-processes google-cloud-platform google-cloud-pubsub google-cloud-python google-cloud-run
我有一个python Web应用程序,需要启动一个长时间运行的进程.问题是我不希望它等待整个过程.刚刚发射完成.
我在Windows XP上运行,并且在IIS下运行Web应用程序(如果这很重要).
到目前为止,我尝试过popen,但这似乎不起作用.它一直等到子进程完成.
我们正在使用长时间运行的 PowerShell 脚本来执行许多可能需要极长时间的小操作。大约 30 分钟后,脚本冻结了。我们能够通过按使脚本重新开始运行,Ctrl-C这会导致脚本恢复执行而不是终止进程。
是否存在某种脚本超时或机制可以防止 PowerShell 中长时间运行脚本?
我创建了一个应用程序(Windows,WPF),它基本上是数据库(Sql Server)中数据的查看器.该应用程序没有编辑功能.
该应用程序提供了根据用户输入搜索记录的功能.在大多数情况下,行由键列搜索并运行得非常快.但是表中的一列是一个大文本字段,我希望能够根据该字段的内容搜索行.因此,生成的SQL查询可能需要一些时间才能完成.我想提供一个停止按钮,以便用户可以根据需要中止搜索.我在上面放置的链接使用Kill命令来杀死Sql server中的spid,但是我不确定这在我的情况下是如何工作的,因为我使用的是Entity Framework(4.1)
例如,假设有一个类似于此的查询:
var docs = from document in context.Documents
join header in context.Headers
on document.DocumentID equals header.HeaderID into headerGroup
from subdoc in headerGroup.DefaultIfEmpty()
where document.LargeTextColumn.Contains("search term")
select (...)
foreach (var item in docs)
{
//Do something with item here
}
Run Code Online (Sandbox Code Playgroud)
由于查询实际上没有发生,直到我使用foreach语句迭代它,如何为用户提供"停止查询"按钮?这类似于Sql Server Management Studio中的停止按钮.
这可能吗?
c# entity-framework cancel-button sql-server-2008 long-running-processes
我必须在我的Flask应用程序中做一些长时间的工作.我想做异步.刚开始工作,然后从javascript检查状态.
我正在尝试做类似的事情:
@app.route('/sync')
def sync():
p = Process(target=routine, args=('abc',))
p.start()
return "Working..."
Run Code Online (Sandbox Code Playgroud)
但它创造了已经不复存在的枪支工人.
怎么解决?我应该使用像芹菜这样的东西吗?
在我的工作中,我需要在postgresql数据库中构建一个新的连接表,该数据库涉及在两个现有表上进行大量计算.这个过程应该花费很长时间,所以我把它设置为在周五离开前的周末.现在,我想检查查询是否完成.
如何在没有进入计算机的情况下检查INSERT命令是否已完成?(不,我不知道要添加多少行.)