当前位置: 首页 > 面试题库 >

异步启动长时间运行的进程

孟新知
2023-03-14
问题内容

在我们的Web应用程序中,用户可以进行需要大量数据库表进行更新的更改。所有内容的加载时间最长为30秒。我不希望用户在导航到另一个页面之前等待其完成。

我将长时间运行的代码放在自己的页面上(例如,“ updateinfo.aspx”),并尝试了一些解决方案,包括jQuery AJAX调用“
updateinfo.aspx”或加载调用“ updateinfo.aspx”的图像文件。在所有情况下,在执行“
updateinfo.aspx”时,我无法从启动AJAX调用的原始HTML页面导航到另一个HTML页面。Chrome表示对“
updateinfo.aspx”的请求正在处理中。当我单击一个链接以离开原始HTML页面时,我们正在“等待example.org
…”,直到AJAX页面完成,然后继续浏览下一个HTML页面的请求,并新建一个页面负载。

因此,这违反了将长时间运行的代码放入AJAX页面的目的。用户页面快速呈现,但是他们无法继续浏览一天,直到AJAX页面完成为止。我不在乎AJAX页面的输出。

有什么想法吗?


问题答案:

您不应该真正在网页上下文中执行长时间运行的过程。当客户端应用程序是Web浏览器时,HTTP请求/响应模型不适合该概念。我不得不多次处理这种情况。你可以: -

  1. 使用MSMQ;将消息提交到包含要执行的操作的详细信息的队列,或者
  2. 将要执行的操作的详细信息写入“作业”表

然后,您可以创建Windows服务,以一次从表中一次读取队列/拉未处理项目中的消息,并执行长时间运行的操作。

在最近的项目中,我必须从内存中创建一个用户控件,该用户控件位于标题(即母版页)中,该控件每15秒通过jQuery
Ajax轮询数据库表一次,以检测作业何时完成,并且向用户显示一个弹出框,指示作业已完成。

我可以尝试在某些地方挖掘一些html" target="_blank">示例,但是这些是主要的运动部​​分,这是否有帮助?



 类似资料:
  • 问题内容: 我试图运行一个异步进程,但我不希望程序等到这些进程执行结束。我发现了这个问题,如何从Java程序中异步运行shell脚本,但是它没有我想要的答案。 我正在做的只是运行bash进程,而在运行bash进程后,我不希望Java程序等到完成为止。这是我所做的: 我还在main方法的末尾放出了另一张印刷品,因此得到以下输出: 但是,程序不会终止,因为这两个进程尚未终止。 我该如何解决这个问题?

  • 问题内容: 是否可以获取旧的运行过程的开始时间?如果今天不是开始日期,似乎会报告日期(而不是时间),如果今年不是开始日期,则只会报告日期。旧工艺会永远失去精度吗? 问题答案: 您可以指定格式器并使用,例如以下命令: 上面的命令将输出所有进程,并带有格式化程序以获取PID,命令运行以及启动日期和时间。 示例(从Debian / Jessie命令行) 您可以阅读的联机帮助页或查看Opengroup的其

  • 我是新的Liferay开发,我面临的麻烦与启动我的Liferay Tomcat服务器。它几乎需要3分钟(169048毫秒),这对于开发来说是不可接受的。我想把它压缩到一分钟左右。 以下是我的机器的规格: 英特尔酷睿双核T2300@1.66 GHz 4GB RAM(使用中3.24GB) 带有Service Pack 1Windows 7 Enterprise 32位 我正在使用: Liferay 6

  • 正如您所看到的,前两行之间有超过2分钟的间隔,这很可笑,尤其是考虑到这是一个非常小的应用程序。 在放弃自由配置文件之前,我可以做些什么来加快速度?

  • 问题内容: 我的应用程序运行一些数据库查询,这可能需要很长时间。 在执行这些查询时,我的应用程序似乎死机了,看起来该应用程序已停止工作。 我需要使用progressbar来避免此问题,但是我不确定如何预测查询执行所花费的时间。 运行查询的代码如下 如何显示进度条以显示查询的进度? 问题答案: 您可以用来解决这类问题。 首先定义一个类的全局变量, 例如 然后在执行查询(如事件或其他任何内容)的过程中

  • 我有一个Django应用程序,在我的一个视图中,我实际上正在对一个发送电子邮件的函数进行异步调用。我都使用了threading.thread(与start())以及一个名为after_response的小django包,它基本上做同样的事情。 以下是我所做的: 这段代码在运行djangomanage.pyrunserver时效果很好;在使用nginx Gunicorn时也很好。但是,我注意到当使用