问题标签 [task-queue]

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 投票
3 回答
6507 浏览

python - 创建 python 优先级队列

我想在 python 中构建一个优先级队列,其中队列包含不同的字典及其优先级编号。因此,当调用“get 函数”时,优先级最高(编号最小)的字典将被拉出队列,而当调用“add 函数”时,新字典将被添加到队列中并根据其排序优先编号。

请帮忙...

提前致谢!

0 投票
2 回答
1165 浏览

google-app-engine - App Engine - 使用 Mapper API 的任务队列重试计数

这是我正在尝试做的事情:我使用新的 Mapper API 设置了 MapReduce 作业。这基本上工作正常。问题是任务队列重试所有失败的任务。但实际上我不希望他那样做。有没有办法从队列中删除任务或告诉它任务已成功完成?也许通过 200 状态码?

我知道我可以获取 X-Appengine-Taskretrycount,但这并没有真正帮助,因为我不知道如何停止任务。我尝试在 try .. except 块中使用“通过”,但这也不起作用。

任何帮助将非常感激 :)

谢谢,克里斯

0 投票
2 回答
1105 浏览

google-app-engine - Google App Engine:任务队列上的 bucket_size 参数

关于 Bucket_size 参数的 Google 文档只给出了一个简短的定义、一个维基百科链接和一个示例:

桶大小

限制队列处理的突发性,
即更大的桶大小允许队列执行率的更大峰值。例如,考虑一个速率为 5/s 且桶大小为 10 的队列。如果该队列已经有一段时间不活动(允许其“令牌桶”填满),并且突然有 20 个任务入队,它将可以立即执行 10 个任务。但是在接下来的一秒内,由于令牌桶已经耗尽,并且正在以指定的 5/s 速率重新填充,因此只能再执行 5 个任务。

您能否解释一下Bucket_size参数以及该参数在哪些方面有用?

0 投票
1 回答
939 浏览

google-app-engine - 如何从您的代码中取消 Google App Engine 任务队列中的任务

我正在开发一个 GAE 应用程序,它将采用逗号分隔的列表并从中创建一个批处理作业。我想在给定时间从任何一个批处理作业将一项任务添加到任务队列中。这样做的问题是,如果一个任务无法执行,它将永远重复,其余的任务将永远不会被添加到队列中。如果执行太多次,我的代码中是否有任何方法可以杀死任务队列中的任务?

0 投票
3 回答
164 浏览

.net - 解决这个多线程问题的方法是什么?

简短的问题

我想生成一个后台线程来处理提交到队列的工作项(比如一个线程池)。有些工作项能够报告进度,有些则不能。我应该使用 .NET 的无数多线程方法中的哪一种?


冗长的解释(避免询问没有任何意义的一半):

我的 winforms 应用程序的主窗口垂直分成两半。左半部分包含一个带有项目的树视图。当用户双击树视图中的一个项目时,该项目在右半边打开。几乎所有对象都有很多属性,分为几个部分(由选项卡表示)。这些属性的加载需要相当长的时间,通常在 10 秒左右,有时甚至更多。并且每隔一段时间就会添加更多属性,因此时间会增加。

目前我的单线程设计使 UI 这次没有响应。这自然是不可取的。我想在后台逐部分加载东西,一旦加载一部分就可以使用。对于其他部分,我会显示一个带有加载动画或其他内容的占位符选项卡。此外,虽然某些部分是在单个冗长的整体操作中加载的,但其他部分由许多较小的函数调用和计算组成,因此可以显示加载进度。对于这些部分,很高兴看到进度(特别是如果它们挂在某个地方,这种情况发生了)。

请注意,数据源不是线程安全的,所以我不能同时加载两个部分。

什么方法最好实现这种行为?是否有一些 .NET 课程可以减轻我的工作负担,或者我应该放下并弄脏 .NETThread吗?

A 进行ThreadPool工作项队列管理,但没有用于进度报告的设施。BackgroundWorker另一方面支持进度报告,但它适用于单个工作项。有没有可能两者兼而有之?

0 投票
4 回答
1446 浏览

java - 是否有复杂的 Java WorkQueue API?

我正在寻找一个提供以下功能的 WorkQueue API:

  • java.util.Queue兼容的
  • 提供(可选)集语义
  • 单一和批处理
  • 并发(当然)
  • 调度
  • 不同的处理策略
    • 等到下一次计划执行
    • 预处理,如果满足批量大小
    • 延迟处理(队列中的最短时间,在被处理之前)
  • 持久性(可选)

jdk 中有很多有趣的实现,例如java.util.DelayQueue我可以使用的。我只是想确保我没有重新发明轮子。

0 投票
3 回答
6299 浏览

php - 使用 PHP 进行异步处理 - 每个作业一个工人

考虑一个 PHP Web 应用程序,其目的是接受用户请求以启动通用异步作业,然后创建一个工作进程/线程来运行该作业。这些作业不是特别占用 CPU 或内存,但预计会经常阻塞 I/O 调用。每秒不应启动超过一到两个作业,但由于运行时间长,可能同时运行许多作业。

因此,作业并行运行至关重要。此外,每个作业都必须由一个负责杀死挂起的工作人员、根据用户请求中止工作人员等的管理器守护进程进行监控。

实施这样的系统的最佳方法是什么?我可以看到:

  1. 从经理那里分叉一个工人——这似乎是最低级别的选择,我必须自己实施一个监控系统。Apache 是 Web 服务器,因此这个选项似乎需要通过 FastCGI 启动任何 PHP 工作者。
  2. 使用某种作业/消息队列。(gearman、beantalkd、RabbitMQ 等) - 最初,这似乎是显而易见的选择。经过一些研究,我对所有选项都有些困惑。例如,Gearman 看起来像是为大型分布式系统设计的,其中有固定的工人池......所以我不知道它是否适合我的需要(每个工作一个工人)。
0 投票
4 回答
245 浏览

c# - 是否有一种标准模式可以避免由于单个阻塞任务而导致作业队列中的延迟?

我有一个基本的任务执行队列(与 3 个独立系统对话的 c# WinForms App)。一切都很好,直到其中一个 Web 服务决定不以通常的速度响应。

我对通过多线程作业加快速度不感兴趣,但现在我在生产中使用它,我可以看到至少有两个线程运行作业的好处 - 如果一个阻塞并且它是异常,另一个会保持卡车,如果两者都阻塞,那么可能会有任意数量的线程,而我只是处理它。

所以,问题是:这是我刚刚描述的一种常见模式吗,是否有该模式的名称和/或一些很棒的参考或框架,或者任何可以帮助我不重新发明任何轮子的东西。

基于评论/答案的补充

这些任务可以同时运行。出于速度的目的,我选择不仔细研究多线程设计,但我现在正在考虑在面对不常见的任务延迟时获得一致的性能。

我的假设是,每隔一段时间,对 Web 服务的调用就会花费不成比例的更长的时间来完成,同时仍然被认为是非异常的。如果平均执行时间为 1 秒(包括大量不同的 Web 服务调用)和 Web 服务所用时间的 0.0001%,那么这对 N 个作业的总运行时间的影响可以忽略不计。 15秒回复。

线程池是否只是另一种说法,“启动工作线程并手动管理它们的状态”?或者有什么东西可以帮助我管理复杂性?我担心在这种情况下引入错误的机会与收益不成比例......

我想我正在寻找类似于线程池的东西,但只有在检测到延迟时才会启动额外的线程。

如果有人可以给我更多关于其中一条评论所指的工作窃取线程的信息,那听起来很有希望。

我没有使用 BackgroundWorker 组件的原因是因为它们似乎是为您知道需要多少工人的情况而构建的,而且我最好保持设计的灵活性

PS:再次感谢。谢谢!

0 投票
1 回答
157 浏览

python - 当任务接近 30 秒限制时,App Engine 会引发哪个异常?

来自任务队列 Python API 概述

如果您的任务执行接近 30 秒的限制,App Engine 将引发您可能捕获的异常,然后快速保存您的工作或日志过程。

那是哪个例外?

0 投票
2 回答
124 浏览

google-app-engine - 如何访问 GAE 上的任务列表?

我计划使用 GAE 的 TaskQueue API 来刷新我的 HTML 页面缓存,我将其保存在 Datastore(和 memcache,但 Datastore 更可靠)中。

每周一次,我添加/编辑一些数据,并且需要重新生成关联的 HTML 页面,触发任务是这样做的。

请注意,不同的编辑可能意味着更改相同的缓存页面。例如,主页有来自不同数据的几个部分的片段。我想要的是延迟(例如使用一小时倒计时)将任务启动到任务队列,以便我可以累积多次编辑,最后,缓存页面只会重新生成一次。

问题是,如果已经有一个任务在一小时内排队重新生成页面 X,我不需要添加任务来重新生成页面 X。因此,我需要检查任务列表,看看是否已经有一个。

如何访问任务列表?