小编Dee*_*top的帖子

从嵌套的链和和弦中获取所有任务ID

我正在使用带有Redis后端的Celery 3.1.9.我正在运行的工作由几个以和弦和链条运行的子任务组成.结构如下所示:

  1. 准备
  2. 下载数据(2名工人的和弦)
  3. 解析并存储下载的数据
  4. 4名工人的长期和弦
  5. 敲定
  6. 生成报告

列表中的每个项目都是一个子任务,它们都链接在一起.第2步和第4步是和弦.通过为第4步创建和弦来连接整个事情,其中​​回调是4 - > 6的链,然后为第2步创建和弦,其回调是3 - >第一和弦.然后,最后创建一个链 - >第二个和弦.然后使用delay()启动该链,并将其ID存储在数据库中.

问题是双重的,首先我希望能够撤销整个事情,其次我希望在我的Task类上有一个自定义的on_failure来进行一些清理,并向用户报告失败.

目前我存储了链的任务ID,我想我可以用它来撤销链.此外,如果出现错误,我想将链路连接到它的根(在on_failure处理程序中)以从数据库中检索相关记录.这不起作用,因为当您仅使用任务的ID重新创建AsyncResult实例时,它的父属性为None.

我尝试的第二件事是存储在外链的结果上调用的serializable()的结果.但是,这不返回整个AsyncResult对象树,它只返回链中第一级的ID(因此不是和弦中子项的ID.)

我尝试的第三件事就是基本上自己实现serializable(),但事实证明,原始方法不会超过2级的原因是因为链的子节点是celery.canvas.chord对象,而不是AsyncResult实例.

问题的例证:

chord([
    foo.si(),
    foo.si(),
    foo.si(),
], bar.si() | bar.si())
res = chord.apply_async()
pprint(res.serializable())
Run Code Online (Sandbox Code Playgroud)

打印以下内容:

(('50c9eb94-7a63-49dc-b491-6fce5fed3713',
  ('d95a82b7-c107-4a2c-81eb-296dc3fb88c3',
   [(('7c72310b-afc7-4010-9de4-e64cd9d30281', None), None),
    (('2cb80041-ff29-45fe-b40c-2781b17e59dd', None), None),
    (('e85ab83d-dd44-44b5-b79a-2bbf83c4332f', None), None)])),
 None)
Run Code Online (Sandbox Code Playgroud)

第一个ID是回调链的id,第二个ID来自和弦任务本身,后三个是和弦内的实际任务.但是我无法从回调链中的任务得到结果(即两个bar.si()调用的ID).

有没有办法获得实际的任务ID?

python redis celery

15
推荐指数
1
解决办法
1131
查看次数

无法打开包含西里尔字母符号的 Python 编码 URL

我有以下网址“mysite.com/\\u0422\\u0435\\u043A\\u0441\\u0442 \\u043D\\u0430 \\u043A\\u0438\\u0440\\u0438\\u043B\\u0438\ \u0446\\u0430" ("mysite.com/\xd0\xa2\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xbd\xd0\xb0 \xd0\xba\xd0\xb8\xd1 \x80\xd0\xb8\xd0\xbb\xd0\xb8\xd1\x86\xd0\xb0")。我想使用 browser.open(link) 打开这个 URL,其中 browser 是

\n\n
$CHandler = urllib2.HTTPCookieProcessor(cookielib.CookieJar())\nbrowser = urllib2.build_opener(CHandler)\nuser_agent = \'  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110420 Firefox/3.6.17\'\nbrowser.addheaders = [(\'User-agent\', user_agent )]\nurllib2.install_opener(browser)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是我收到错误:

\n\n
\n

UnicodeEncodeError: \'ascii\' 编解码器无法对位置 12-17 中的字符进行编码:序数不在范围内 (128)"

\n
\n\n

我从 JSON 中获取此 URL。

\n\n

我该如何解决这个问题?

\n

python url encoding

3
推荐指数
1
解决办法
3148
查看次数

当我们输入8和11时,为什么结果“ eightnine”在一起?

当我使用输入8和11运行代码时,输​​出为

eightnine
odd
even
odd
Run Code Online (Sandbox Code Playgroud)

我期望的结果是:

eight
nine
odd
even
Run Code Online (Sandbox Code Playgroud)

为什么八行出现在同一行?循环有问题吗?

#include <stdio.h>
#include <string.h>

int main() {
int a, b;

    scanf("%d\n%d", &a, &b);

    char list[11][5]={"one","two","three","four","five","six","seven","eight","nine","even","odd"};
    int i;
    for (i=a;i<=b;i++)
    {
        printf("%s \n",(i<9?list[i-1]:list[9+i%2]));
    }

     return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays for-loop

2
推荐指数
1
解决办法
73
查看次数

标签 统计

python ×2

arrays ×1

c ×1

celery ×1

encoding ×1

for-loop ×1

redis ×1

url ×1