问题标签 [long-running-processes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
1013 浏览

asp.net - 在长时间运行的操作完成之前保持 ASP.NET 页面的最佳方式是什么?

Javascript?

元标记刷新?

Response.Redirect(到自己)

Server.Transfer(给自己)

Ajax 更新面板?

0 投票
4 回答
20412 浏览

bash - 生成进程的 shell 脚本,在 SIGTERM 上终止子进程

我想编写一个 shell 脚本,在后台生成几个长时间运行的进程,然后挂起。收到 SIGTERM 后,我希望所有子进程也终止。

基本上,我想要一个“主进程”。

这是我到目前为止得到的:

上面的脚本失败了trap: 10: SIGTERM: bad trap

编辑:我正在使用 Ubuntu 9.04

0 投票
5 回答
3362 浏览

python - python长时间运行的守护进程作业处理器

我想编写一个长时间运行的进程(linux daemon),它有两个目的:

  • 响应 REST Web 请求
  • 执行可以安排的作业

我最初将它作为一个简单的程序运行,该程序将运行并执行我然后 cron'd 的更新,但现在我有添加的 REST 要求,并且还想更改某些作业的频率,但不更改其他作业的频率(假设所有工作都有不同的频率)。

我有 0 次编写长时间运行的流程的经验,尤其是那些自己做事而不是响应请求的流程。

我的基本计划是在单独的线程/进程中运行 REST 部分,并认为我会单独运行作业部分。

我想知道是否存在任何模式,特别是 python,(我已经看过并且还没有真正找到任何我想做的例子)或者是否有人对从哪里开始转换我的项目以满足这些有任何建议新的要求。我见过一些涉及日程安排的项目,但我真的在这里寻找真实世界的用户体验/建议。什么对您有效/无效?

0 投票
2 回答
545 浏览

c# - 关闭 Windows 服务中的长时间运行的进程

我有一个执行长时间运行的进程的 Windows 服务。它由计时器触发,整个过程可能需要几分钟才能完成。当计时器经过时,服务会实例化一个执行各种任务的管理对象,记录结果然后退出。

当服务器在进程中间关闭时,我没有实施任何处理这些情况的方法。这可能会导致一些问题。处理此问题的最佳做法是什么?

0 投票
2 回答
2642 浏览

windows - 在 Windows 上运行任意子进程并且仍然干净地终止?

我有一个应用程序 A,我希望它能够调用用户在配置文件中指定的任意其他进程。

批处理脚本 B 是用户希望 A 调用的此类过程。B 设置一些环境变量,显示一些消息并调用编译器 C 来完成一些工作。

Windows 是否为干净地终止任意进程提供了标准方法?假设 A 在控制台中运行并收到 CTRL+C。它可以将其传递给B和C吗?假设A在一个窗口中运行,用户试图关闭窗口,是否可以取消B和C?

TerminateProcess 是一种选择,但不是一个很好的选择。如果 A 在 B 上使用 TerminateProcess,则 C 继续运行。如果 C 长时间运行,这可能会导致严重的问题,因为我们可能会启动另一个 C 实例来操作相同的文件,而 C 的第一个实例仍在秘密工作。此外, TerminateProcess 不会导致干净的退出。

GenerateConsoleCtrlEvent 听起来不错,并且当一切都在控制台中运行时可能会起作用,但是文档说您只能将 CTRL+C 发送到您自己的控制台,因此如果 A 在窗口中运行则无济于事。

在 Windows 上是否有任何与 SIGINT 等价的东西?我很想找到这样一篇文章:http: //www.cons.org/cracauer/sigint.html for Windows。

0 投票
4 回答
7619 浏览

python - How to start a long-running process from a Django view?

I need to run a process that might take hours to complete from a Django view. I don't need to know the state or communicate with it but I need that view to redirect away right after starting the process.

I've tried using subprocess.Popen, using it within a new threading.Thread, multiprocessing.Process. However, the parent process keeps hanging until child terminates. The only way that almost gets it done is using a fork. Obviously that isn't good as it leaves a zombie process behind until parent terminates.

That's what I'm trying to do when using fork:

So, is there a way to run a completely independent process from a Django view with minimal casualties? Or am I doing something wrong?

0 投票
3 回答
543 浏览

weblogic - 工作经理线程约束和页面无法显示

我们对某些功能进行了内存密集型处理,我们希望限制此处理的并行请求数量。我们可以通过在 WebLogic 中使用“工作管理器”并限制该 servlet 的线程数来进行配置。

比如我们把maximim thread limit设置为3,那么如果有10个并行请求;7 个请求在队列中。在某些情况下,这些在队列中等待的请求可能需要长达 30-40 分钟才能得到处理。我们做了简单的测试,收到的页面15分钟后超时无法显示,1小时后收到消息。

有谁知道WebLogic中是否有设置来增加/减少超时并避免页面无法显示?

感谢有人对此有任何想法。

0 投票
2 回答
763 浏览

c# - ASP.NET 后台处理阻止状态或 UI 反馈

我知道这个问题已经被问过很多次了,但我的问题有点不同。

我有让用户下载和上传excel文件的页面。在下载 excel 的过程中,生成文件大约需要 2 分钟。我添加了检查点,这些检查点更新数据库的状态,例如(开始处理,处理标题......等)。我为上传做了同样的事情。

我还有一个 ajax 请求,它以固定的时间间隔检查数据库并向用户打印状态以提供反馈,例如(开始处理、处理标题等)。

问题是,我只有在过程完成后才能得到反馈。看起来会话在后台进程期间被阻止,并且任何其他请求(ajax)只有在后台进程结束后才完成。ajax 在 4 秒的间隔内发出大约 10 个请求。我最后只得到 10 个响应。

我尝试了两个 iframe 和框架,一个运行 ajax,另一个运行进程,不起作用。我尝试了单独的浏览器(进程在 IE 中运行,ajax 在 FF 中运行)并且有效(所以我现在我的代码有效)。有人可以建议吗?谢谢

ps 我的环境是IIS 6,ASP.NET 3.5 和MVC 1.0 浏览器是IE6.0

0 投票
2 回答
2091 浏览

java - 长期运行的 Web 服务架构

我们使用axis2来构建我们的webservices和一个Jboss服务器来运行我们所有应用程序的逻辑。我们被要求构建一个与 bean 对话的 Web 服务,该 bean 可能需要长达 1 小时才能响应(取决于请求的大小),因此我们将无法在此期间保持与消费者的连接。

我们可以使用异步 Web 服务,但效果并不理想,因此我们决定可以实现一个 bean,该 bean 将执行 Web 服务背后的逻辑,并让服务异步调用该 bean。Web 服务将生成一个令牌,该令牌将传递给消费者,消费者可以使用它来查询请求的状态。

我的问题是:

  1. 从创建该 bean 的服务中的方法返回后,如何查询 Jboss 服务器上 bean 的状态。我需要使用有状态的bean吗?
  2. 如果我想从 web 服务端进行异步调用,我可以使用有状态 bean 吗?
0 投票
5 回答
1591 浏览

.net - .NET 挫折 - Process.GetProcessById 返回新参考

我正在编写将启动许多子进程的 ac# 程序。稍后,我将需要按 ID 检索这些进程,然后将这些进程与存储在 Dictionary 中的一组进程进行匹配,这些进程在首次创建时添加到 Dictionary 中。然而,我遇到了一个看起来很荒谬的问题......

我使用 .NET Reflector 发现 GetProcessById 返回一个“新进程(...)”,但它似乎应该只找到对已运行进程的引用并返回它。

您可以假设第一个 Debug 语句本质上是一个调用,例如

MyCustomDataType 数据 = myDictionary[notepad];

我希望得到我最初插入的数据,而不是得到一个 KeyNotFoundException 可能是因为默认比较器正在进行参考检查。为了解决这个问题,我在字典中添加了一个自定义 IComparer,它只检查两个 Process 对象是否具有相同的 ID,因此我可以按预期获取相关数据。但是,这有其自身的问题,即未运行的进程没有进程 ID,因此有时在我的自定义 IComparer 中对 Process.ID 的调用会引发 InvalidOperationException!!!所以,我已经解决了一个问题,只是为了创建另一个问题。

所以,我想我有两个问题:

  • 为什么 .NET 不只返回对已经运行的 Process 实例的引用?
  • 我可以做些什么来匹配存储在我的字典中的进程,因为使用进程 ID 在 Process 对象的生命周期内并不总是有效?