问题标签 [python-rq]
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.
python - 如何在 django-rq enqueue 中传递非必要的内置对象作为参数
更新:我发现我什至不能通过一个类enqueue
,这可能吗?
我想传递一个item
对象(Django中的一个模型)作为参数queue.enqueue(grabber.parse_body, item)
,但是rqworker
会引发这个异常(一旦我尝试将项目作为参数传递,不管我是否使用它):
文件“/usr/local/lib/python3.4/dist-packages/rq/job.py”,第 53 行,在 unpickle 中引发 UnpickleError('Could not unpickle.', pickled_string, e) rq.exceptions.UnpickleError: ( 'Could not unpickle.', ImproperlyConfigured('请求设置 INSTALLED_APPS,但设置未配置。您必须在访问设置之前定义环境变量 DJANGO_SETTINGS_MODULE 或调用 settings.configure()。',))
好像parse_body
不知道item
是什么?
我知道我可以将项目的 id 作为参数传递,然后处理 id in parse_body
,但这可以item
直接使用 inparse_body
吗?
我的主要代码:(enqueue.py
并且grabber.py
是独立脚本,不在 Django 应用程序中。)
入队.py
抓取器.py
python - 如何使用 Flask 在 Heroku 上使用 RedisCloud 设置 RQ 工作者
我正在尝试在 heroku 上为我的烧瓶应用程序创建一个 python rq worker。heroku 文档提供了以下用于创建工作者的示例代码:
https://devcenter.heroku.com/articles/python-rq#create-a-worker
事情是:我正在使用 RedisCloud 并用 REDISCLOUD_URL 替换 REDISTOGO_URL 不起作用。在本地加载很好,但是当我上传到 heroku 时,我在日志中看到它仍在尝试连接到 localhost。
RedisCloud文档只列出了使用 Python,而不是特别是烧瓶,所以下面的代码根本没有改变我的情况:
我已通过以下方式确认 Heroku 上存在 REDISCLOUD_URL var:
格式:
我找不到关于 redis.from_url() 函数做什么或它接受什么参数的文档。
我在这里缺少什么让这个工作人员查看服务器 var 的 heroku 而不是 localhost?
python - 在 Python RQ 作业中,我的 Redis() 发生了什么?
在我的烧瓶应用程序中,我通常会
然后在我的函数中会做类似的事情
一切都很好。
现在我正在尝试安装/理解/使用 python RQ,我发现它对我的 Redis() 做了什么,我不能像上面那样在 enqueue() 函数中使用它。上面的测试会输出:
使用 SO 方法列出附加到对象的所有方法,我看到通过队列,redis 对象只有:
在 rq 之外调用函数会产生预期的结果:
请有人帮助我了解这里发生了什么。我的队列任务必须能够访问我的 redis 密钥。
python - python-rq worker没有读取队列中的作业
我在设置 python-rq 时面临一个基本问题 -rqworker
似乎无法识别推送到它正在侦听的队列的作业。
一切都在里面运行virtualenv
我有以下代码:
这videogen
是一个简单的函数,它立即返回它接收到的整数参数。
在运行rqworker medium
和启动应用程序时,没有打印任何结果。rqworker 上没有额外的痕迹,除此之外:
可以从我运行 rqworker 的同一个 shell 访问 redis 实例,甚至显示更新的密钥:
那么这里可能缺少什么?
python - 将结果传递给取决于工作 - python rq
如何将作业的结果传递给依赖它的作业?
我目前所做的是将第一份工作的 id 传递给第二份工作,
并在里面secondJob
获取第一个工作以获得结果
这是推荐的方式吗?有没有其他模式可以用来直接将第一份工作的结果传递给第二份?
javascript - 使用 JavaScript 进行 Python RQ 排队
我正在尝试使用 JavaScript 对 Python RQ 的任务进行排队。为此,我只是监控了 RQ 对 Redis 的作用。特别是它存储了一个腌制列表,指示在哪里可以找到要运行的任务,包括输入参数等。这里我使用的是 RQ 主页上的示例。存储以下字符串(腌制列表)时:
使用 JavaScript,它对文字\x80
和\x85
. 它将它们替换为\xc2\x80
and\xc2\x85
我无法弄清楚为什么以及如何阻止这种行为。字符串的其余部分按预期汇入 Redis。额外的文字会阻碍 rqworker,更具体地说是 pickle,正常运行。
我正在使用节点和 node_redis。
python - Flask Heroku 应用程序无法连接到 Redis 队列
我的烧瓶应用程序在本地运行良好,但是当我将它部署到 Heroku 时,它无法连接到 Redis 队列。
这是我得到的例外:
我已经安装了 RedisToGo 插件,并且我还检查了 -import redis
运行后我可以heroku run python
这里一定出了什么问题?我必须手动启动redis服务器吗?
编辑:所以看起来应用程序正在尝试在本地连接到 redis,但我再次使用 shell 来确定应用程序是否在 env 变量中设置了 redistogo url,结果确实如此。所以现在我必须弄清楚为什么应用程序使用本地 url。我正在使用此处给出的相同代码:
编辑2:所以我尝试直接在我的工作代码中硬编码redistogo url,但我仍然看到这个错误。所以工人代码可能不是问题。我不知道是什么。 https://devcenter.heroku.com/articles/python-rq#create-a-worker
编辑3:看起来我的问题很像这个人的:
如何使用 Flask 在 Heroku 上使用 RedisCloud 设置 RQ 工作者
编辑4:
这是我的代码库: https ://bitbucket.org/elbee19/mailr/src
这就是我现在使用工人的方式:
这是现在主烧瓶文件中的代码。这是引发错误的代码:
python - 两个模块应该使用相同的redis连接吗?(我正在使用 Flask)
我正在构建一个使用 Redis 队列的 Flask 应用程序。工人的代码是:
另一个模块 app.py 包含处理 Flask 路由的代码。我的问题是,app.py 是否应该创建一个新的 Redis 连接:
或者应该 app.py 使用
并使用该连接?
python - RQ与supervisord并发?
总而言之,我正在尝试“强制”RQ 工作人员使用 supervisord 同时执行。我的设置 supervisord 设置似乎工作正常,因为 rq-dashboard 显示 3 个工作人员、3 个 PID 和 3 个队列(每个工作人员/PID 一个)。Supervisord 设置如下(仅显示工人 1 设置,在此下方定义了另外 2 个工人):
问题是当我同时发送 3 个作业时,运行的总时间是单个任务的 x3(即总时间与任务数成线性关系,这可以扩展到 x4、x5 等)。似乎没有并发可用。我还通过将新作业发送到具有最少已启动+排队作业的队列来实现原始负载平衡,这工作正常(观察到作业在队列之间均匀分布)。
为什么此设置不允许并发?
关于我缺少的设置的任何注意事项?
请注意,当我迁移到 PY3 并且 PY3 尚不支持 gevent 本身时,rq-gevent-worker 包(在早期的并发/RQ 上运行良好)不再可用。但这给了我一个线索,即并发是可能的。
python - 与 celery 正在进行的任务交互
我们有一个基于rabbitMQ
和的分布式架构Celery
。我们可以毫无问题地并行启动多个任务。可扩展性很好。
现在我们需要远程控制任务:PAUSE、RESUME、CANCEL。我们找到的唯一解决方案是在 Celery 任务中对另一个任务进行 RPC 调用,该任务在 DB 请求后回复命令。Celery 任务和 RPC 任务不在同一台机器上,只有 RPC 任务可以访问数据库。
您对如何改进它并轻松与正在进行的任务进行沟通有什么建议吗?谢谢
编辑:
事实上,我们想做如下图所示的事情。Blue
配置或配置很容易Orange
,但我们不知道如何同时进行。
工人正在订阅一个公共Jobs queue
,每个工人在交易所都有自己的Admin queue
声明。
编辑:
如果这是不可能的Celery
,我愿意接受其他框架的解决方案,如python-rq
.