小编geg*_*all的帖子

启动后立即访问django-celery-results TaskResult

我在 Django 视图中执行了几个 Celery 任务(更具体地说,在 Django Rest Framework 的perform_create方法中)。

我想要实现的是立即(即,一旦任务在结果后端中有一个 id/is)访问该TaskResult对象并对其执行某些操作,如下所示:

tasks = [do_something.s(a) for a in (1, 2, 3, 4,)]
results = group(*tasks).apply_async()

for result in results.children:
    task = TaskResult.objects.get(task_id=result.task_id)
    do_something_with_task_object(task)
Run Code Online (Sandbox Code Playgroud)

现在,这失败了django_celery_results.models.DoesNotExist: TaskResult matching query does not exist

我还没有尝试过,但我可以使用以下代码片段来完成这项工作。但这在我看来是完全错误和丑陋的,它是否还要等到任务完成:

while not all([TaskResult.objects.filter(task_id=t.task_id).exists() for t in results.children]):
    pass        
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使这项工作以一种漂亮而干净的方式工作吗?

python django celery django-celery

5
推荐指数
1
解决办法
1254
查看次数

将Cython中的C结构包装/转换为Python类

我刚刚开始熟悉Cython,试图将一些C语言结构包装到Python方法和类中.我真正不了解的是如何从(初始化的)C结构转换到相应的Python类应该可行.我在这里想念的是什么:

C头文件的片段:

struct test_struct {
    int _something;
    complex_struct* _another;
};
typedef struct test_struct test;

test *test_new(void);
int some_method(test **n, int irrelevant);
Run Code Online (Sandbox Code Playgroud)

来自我的.pxd的相应片段:

cdef struct test_struct:
    pass
ctypedef test_struct test

test* test_new()
int some_method(test **n, int irrelevant)
Run Code Online (Sandbox Code Playgroud)

我的.pyx:

def do_something(int irrelevant):
    cdef test* t = test_new()
    ret = some_method(&t, irrelevant)

    # Here comes the problem...
    return <Test?>t

cdef class Test:  
    cdef test* _t

    # cinit here and some methods here. No members except _t
Run Code Online (Sandbox Code Playgroud)

返回声明的所有内容都可以正常工作.我得到一个正确的值ret,等等.但返回语句中的强制转换似乎不正确或缺少更多信息.发出t = do_something(42)Python段错误时. …

c python struct casting cython

4
推荐指数
1
解决办法
1742
查看次数

标签 统计

python ×2

c ×1

casting ×1

celery ×1

cython ×1

django ×1

django-celery ×1

struct ×1