在发生事件之前,任务可以在任务队列中等待处理多长时间?如果不是永远,那么可能会发生什么?
我可以将大量任务添加到处理率非常低的队列中,并在几天/几周/几个月内处理它们吗?
如果任务等待时间过长,是否会从队列中弹出?
maximum countdown/ETA for a task:30 days from the current date and time
Run Code Online (Sandbox Code Playgroud)
我认为这是在谈论有意/有计划地在未来设置 eta,而不是允许任务等待多长时间。
我找不到任何关于如何使queue_classic将日志写入文件的解决方案.Queue_Classic用于记录的Scrolls似乎也没有任何示例.
有人能提供一个有效的例子吗?
我正在构建一个应用程序,出于所有并发原因,该应用程序需要了解所有下载是否均已完成。只有当我所有的下载完成后,才能启动某个功能。
我设法编写了一个检查队列中旧下载的函数:
DownloadManager dm = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);
Query q = new Query();
q.setFilterByStatus(DownloadManager.STATUS_FAILED|DownloadManager.STATUS_PENDING|DownloadManager.STATUS_RUNNING);
Cursor c = dm.query(q);
Run Code Online (Sandbox Code Playgroud)
问题是-可以肯定的是-在初始化时,我想清理队列并删除所有条目。
有什么想法我现在可以删除条目吗?
此功能对我不起作用,因为我不想物理删除文件...只需清空队列。
有任何想法吗?
我是一名开发人员,难以区分Call Stack和Task Queue两个术语。有没有人可以帮我解释一下区别?
提前致谢。
使用 App Engine Python 运行时对后台任务进行排队时,您可以为队列指定一个目标,该目标将发送要在特定服务、版本或实例上运行的任务:
task = taskqueue.add(
url='/update_counter',
target='worker',
params={'amount': amount})
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Java 中做到这一点?该文档提到了该target参数,但没有显示如何使用它的示例。该Queue.add方法没有针对 的选项target。这个TaskOptions类也没有任何看起来像target。
这个问题记录了如何使用target,但答案是在queue.xml. 我想在运行时选择目标,比如 Python。
我正在尝试安排一封电子邮件来提醒明天必须完成的任务的用户。我做了一个自定义命令email:reminder。这是我在自定义命令中的代码:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Todo;
use Illuminate\Support\Facades\Mail;
class SendReminderEmail extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'email:reminder';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Remind users of items due to complete next day';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个管理任务分发(例如任务队列)的 python 库/框架。然而,任务需要专门的工人:工人 A 只能处理类型的任务a,工人 B 和 C 只能处理类型b等。此外,这些工人将在不同的计算机上运行并且不能共享相同的代码库(因为,就像在制造线上,每个任务都绑定到控制特定的硬件,只有一台计算机可以访问)。
我看过像 python RQ这样的库或 Celery,但如果我理解正确的话,它们需要相同的代码库才能在不同的工作人员上运行,并且用于分布式计算。我正在寻找的基本上只是抽象任务队列的管理和工作人员可以通过网络获取任务的机制。一项任务基本上只是一些关于它的进度、错误、结果等的数据和元信息。如果任务也可以相互依赖,那么一项任务可以依赖另一项任务的结果,这是一个奖励。
是否有一个简单的库,负责管理队列、网络协议等,提供我正在寻找的内容?
我的第一个问题/帖子...请善待....
我正在做一个个人项目,其中一个模块循环运行以收集数据。当数据进入时,它会将数据插入数据库交给队列中的一个函数,在那里一个侦听 rq 工作器接收它并处理该函数。数据库使用 SQLAlchemy 进行管理,这意味着它必须生成引擎、会话并定义数据库表。
代码文件的结构是:
--/home/..../collect-view/ (this is the project folder)
-- DataCollection
-- main_client.py (main loop waiting for user data)
-- collect_data.py (contains the database insertion function)
-- base.py (the base file for SQLAlchemy database definition)
-- tables.py (the file which sets up the table name and definition)
-- app.db (the database file)
Run Code Online (Sandbox Code Playgroud)
注意:数据库文件位于更高级别的目录中,因为它也被另一个位于此级别的应用程序(Flask 应用程序)访问
要实现此代码,“collect_data”必须导入“base”和“tables”,“tables”必须导入“base”。这被证明是一个问题,因为一旦 collect_data 函数(称为“传输”)由工作人员运行,它就无法再找到要导入的文件,并且工作人员会吐出一个异常,说它无法导入“base ”。我在网上搜索了答案,最终在 nvie 的 Github 上找到了一个答案,其中提到使用 --path 选项将工作人员引导到正确的路径。我通过实现它来工作:
$ rq worker rq_worker_data2db --path /home/../../collect_view/DataCollection
Run Code Online (Sandbox Code Playgroud)
然后我遇到了另一个与路径相关的失败,其中工作人员说它找不到我试图将数据插入的数据库表。所以我更改了引擎创建步骤以包含我的完整路径......
base_url = '/home/.../collect_view/'
engine = …Run Code Online (Sandbox Code Playgroud) 我有一个 Web 服务(Python 3.7、Flask 1.0.2),其工作流由 3 个步骤组成:
远程计算作业的长度是任意的(在秒和天之间),每一步都依赖于上一步的完成:
with Connection(redis.from_url(current_app.config['REDIS_URL'])):
q = Queue()
job1 = q.enqueue(step1)
job2 = q.enqueue(step2, depends_on=job1)
job3 = q.enqueue(step3, depends_on=job2)
Run Code Online (Sandbox Code Playgroud)
但是,最终所有工作人员(4 名工作人员)都将进行轮询(4 个客户端请求中的第 2 步),而他们应该继续执行其他传入请求的第 1 步和已成功通过第 2 步的那些工作流的第 3 步。
工人应该在每次投票后被释放。他们应该定期返回第 2 步进行下一次轮询(每个作业最多每 61 秒一次),如果远程计算作业轮询未返回“DONE”,则重新排队轮询作业。
此时我开始使用rq-scheduler(因为间隔和重新排队功能听起来很有希望):
with Connection(redis.from_url(current_app.config['REDIS_URL'])):
q = Queue()
s = Scheduler('default')
job1 = q.enqueue(step1, REQ_ID)
job2 = Job.create(step2, (REQ_ID,), depends_on=job1)
job2.meta['interval'] = 61
job2.origin …Run Code Online (Sandbox Code Playgroud) 我正在运行一个 Django 应用程序,该应用程序使用 Celery 并使用 Redis 服务器作为工作线程运行异步任务。
我需要能够停止整个基础架构并将其重新启动,而不会导致任务执行中断。所以我需要这样做:
1) Stop the Django webservice
2) Stop celery
3) Shut down Redis daemon
4) Make a few changes in the server or move to a different machine
5) Start Redis daemon
6) Start Celery
7) Start the Django webservice
Run Code Online (Sandbox Code Playgroud)
当整个基础设施再次备份时,它应该从停止的地方继续。即如果队列中有任何任务,它应该继续执行它们。
我该怎么做?有没有办法保存队列并稍后继续?
task-queue ×10
python ×3
java ×2
python-rq ×2
redis ×2
android ×1
callstack ×1
celery ×1
distributed ×1
django ×1
javascript ×1
jquery ×1
laravel ×1
laravel-5.6 ×1
php ×1
ruby ×1
sqlalchemy ×1