我有一个python Web应用程序,需要启动一个长时间运行的进程.问题是我不希望它等待整个过程.刚刚发射完成.
我在Windows XP上运行,并且在IIS下运行Web应用程序(如果这很重要).
到目前为止,我尝试过popen,但这似乎不起作用.它一直等到子进程完成.
我创建了一个应用程序(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
具有Mongo DB的NodeJS服务器 - 一个功能将从数据库生成报告JSON文件,这可能需要一段时间(60秒以上 - 必须处理数十万个条目).
我们希望将其作为后台任务运行.我们需要能够启动报告构建过程,监视它并在用户决定更改params并重新构建它时中止它.
节点最简单的方法是什么?真的不想进入处理作业,消息队列等的单独工作服务器的领域 - 我们需要将它保存在同一个盒子和相当简单的实现上.
1)作为异步方法启动构建,并返回给用户,socket.io报告进度?
2)为构建脚本分离子进程?
3)使用https://www.npmjs.com/package/webworker-threads之类的东西?
通过我看过的几种方法,我陷入了同样的两个方面;
1)如何监控进度?2)如果用户重新提交数据,如何中止现有的构建过程?
任何指针将不胜感激......
multithreading child-process mongodb long-running-processes node.js
当应用程序执行长时间运行的任务时,您是否有一个很好的解决方案来保持"请等待"winform"绘制"?
我尝试在每一步使用form.refresh(),但是有一些长时间运行的查询,这意味着这不够频繁.
基本上这个SO问题但是,在Excel中的C#中通过VSTO(而不是Python).
我有一个bookmarklet,当使用时,将当前浏览器页面上的所有URL提交给Rails 3应用程序进行处理.在幕后我使用Typhoeus来检查每个URL是否返回2XX状态代码.目前,我通过对Rails服务器的AJAX请求启动此过程,只需等待它处理并返回结果.对于一个小集合,这非常快,但是当URL的数量非常大时,用户可以等待,例如10-15秒.
我已经考虑过使用延迟作业来处理用户线程之外的内容,但这似乎不是正确的用例.由于用户需要等到处理完成才能看到结果,并且延迟作业可能需要在作业开始之前最多五秒钟,我不能保证处理将尽快发生.不幸的是,在这种情况下这个等待时间是不可接受的.
理想情况下,我认为应该发生的是:
一些额外的细节:
这是一种典型的方法,还是有更好的方法?我是否应该在处理过程中滚动自己的线程外处理程序来更新数据库,或者是否可以使用延迟作业(可以在Heroku上使用)?任何推动正确的方向将非常感激.
ruby-on-rails long-running-processes delayed-job ruby-on-rails-3
我需要每隔50秒左右将一些数据写入数据库.它类似于在后台运行并静默执行其工作的Windows服务.在我的情况下,启动和停止不是一个选项,因为我需要将少量先前插入的数据存储在内存中.使用Windows Azure或AWS时,最佳解决方案是什么?
谢谢.
cloud azure background-process long-running-processes amazon-web-services
我有一个设置为PerCall的WCF服务
我想知道如何从客户端发送一个Start调用以启动一个长时间运行的进程,并发送一个Cancel命令来取消它
我的WCF服务看起来像这样
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
CancellationTokenSource cancelToken = new CancellationTokenSource();
public void Start()
{
var compute = Task.Factory.StartNew(StartLongRunningTask, cancelToken.Token);
}
public void Stop()
{
cancelToken.Cancel();
}
private void StartLongRunningTask()
{
//process here
}
}
Run Code Online (Sandbox Code Playgroud)
我想这里的问题是,每次呼叫到达服务器时,它都被视为新请求.
那么如何在WCF中启动和取消长时间运行的任务呢?
编辑:我将它作为Windows服务托管
我目前正在开发一个电子邮件应用程序,它依赖于背景service以便能够自动获取新电子邮件。当应用程序打开(或在应用程序的运行列表中)时,此功能完美运行,但一旦我关闭应用程序/将其从最近的应用程序列表中删除,它service也会停止。可以通过进入设备上的“开发人员设置”并查看没有为我的应用程序运行的进程或服务来确认这一点。
我在 StackOverflow 上读过无数的帖子,但似乎没有一个能成功。有时onTaskRemoved() 被调用并且服务被重新启动,但其他时候它根本没有被调用或者被调用,日志显示操作系统已安排重新启动,但service随后由操作系统service获取forced closed,而我总是需要运行此服务以检索新电子邮件。
我当前的代码如下所示:
我的服务:
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Log.i(TAG, "onStartCommand()");
...
Log.d(TAG, "SERVICE IS RUNNING");
if (host != null) {
Log.d(TAG, "STARTING PUSH SERVICE");
Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
Log.d(TAG, "BR: " + ((BugReporting) getApplication())); …Run Code Online (Sandbox Code Playgroud) java service android background-service long-running-processes
我有一个 Android 服务(Servcie 接口的实现),与我的真实应用程序相比,它在单独的进程上运行。不幸的是,当我离开我的真实应用程序(在其中我单击按钮启动我的服务)并从任务管理器中将其刷出时,我的服务也被杀死了。
我知道这里有很多这样的问题,但不知何故,没有人在我的具体星座中针对这个问题,或者他们的回答含糊不清。
所以在我的清单中,我有类似的东西:
<application ...>
<activity .../>
<service Android:name="MyService"
Android:label="MyLabel"
Android:export="false"
Android:process=":MyRemoteProcessName" />
</application>
Run Code Online (Sandbox Code Playgroud)
我首先使用了一个 IntentService,但也切换到了自己的服务接口实现(消除了 IntentService 成为故障点),它看起来像:
public class MyService extends Service {
private ScheduledExecutorService scheduledWorker = Executors.newSingleThreadScheduledExecutor();
@Override
public void onStart() {
// Init components
startForeground(this, MyNotification);
}
@Override
public int onStartCommand(Intent i, int startId) {
// Execute Work on Threadpool here
scheduledWorker.execute(new ScheduledStopRequest(this, startId), 5, TimeUnit.Minutes);
return START_REDILIVER_INTENT;
}
// Overwritten onDestroy-Method
@Override
public void onLowMemory() {
Log.e(LOG_TAG, "On Low Memory called!");
}
@Override …Run Code Online (Sandbox Code Playgroud) android long-running-processes android-service foreground-service
我开始学习multiprocessinginpython并且我注意到在主进程上执行相同的代码比在使用multiprocessing模块创建的进程中执行得快得多。
这是我的代码的简化示例,其中我首先执行代码main process并打印前 10 个计算的时间和总计算的时间。然后执行相同的代码new process(这是一个长时间运行的进程,我可以随时发送new_pattern)。
import multiprocessing
import random
import time
old_patterns = [[random.uniform(-1, 1) for _ in range(0, 10)] for _ in range(0, 2000)]
new_patterns = [[random.uniform(-1, 1) for _ in range(0, 10)] for _ in range(0, 100)]
new_pattern_for_processing = multiprocessing.Array('d', 10)
there_is_new_pattern = multiprocessing.Value('i', 0)
queue = multiprocessing.Queue()
def iterate_and_add(old_patterns, new_pattern):
for each_pattern in old_patterns:
sum = 0
for count in range(0, 10):
sum += …Run Code Online (Sandbox Code Playgroud) python parallel-processing multiprocessing long-running-processes