Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 结合芹菜的工作成果_Python_Python 2.7_Celery - Fatal编程技术网

Python 结合芹菜的工作成果

Python 结合芹菜的工作成果,python,python-2.7,celery,Python,Python 2.7,Celery,我正在用芹菜做一个软件升级系统。我有一个用例,我正在努力干净地实现它。以下是我的工作: 设备软件更新(设备id) 已安装的设备软件(设备id) 最新的设备软件(设备id) 软件更新(已安装软件、最新软件) 在纯python中,设备软件更新的实现可能如下所示 def device_software_updates(device_id): return software_updates(installed_device_software(device_id),

我正在用芹菜做一个软件升级系统。我有一个用例,我正在努力干净地实现它。以下是我的工作:

设备软件更新(设备id)

已安装的设备软件(设备id)

最新的设备软件(设备id)

软件更新(已安装软件、最新软件)

在纯python中,设备软件更新的实现可能如下所示

def device_software_updates(device_id):
    return software_updates(installed_device_software(device_id),
                            latest_device_software(device_id))
在芹菜3.0中实现这一点最干净的方法是什么?我想用小组做些事情。我当前的实现如下所示:

def device_software_updates(device_id):
    return (
        group(installed_device_software.s(device_id),
              latest_device_software.s(device_id)) |
        software_updates.s()
    )()
不幸的是,这意味着软件更新的argspec是
software\u updates(arg\u list)
,这并不理想。

我认为使用chord将是正确的处理方法

根据西芹的记载

和弦是一个任务,它只在一个和弦中的所有任务之后执行 任务集已完成执行

和弦就像一个组,但有回调。和弦包括 标题组和正文,其中正文是应 在标头中的所有任务完成后执行

下面是一个逐行分解的示例(来自芹菜文档)

在您的情况下,您可以做类似的事情,例如:

@celery.task
def device_software_updates():
    callback = software_updates.subtask()
    header = [
              installed_device_software.subtask(device_id), 
              latest_device_software.s(device_id) 
             ]
    result = chord(header)(callback)
    return result.get()

永远不要从任务内部调用result.get(),否则可能会出现死锁。
returns the latest software modules that are not installed
def device_software_updates(device_id):
    return software_updates(installed_device_software(device_id),
                            latest_device_software(device_id))
def device_software_updates(device_id):
    return (
        group(installed_device_software.s(device_id),
              latest_device_software.s(device_id)) |
        software_updates.s()
    )()
callback = tsum.subtask()
header = [add.subtask((i, i)) for i in xrange(100)]
result = chord(header)(callback)
result.get()
@celery.task
def device_software_updates():
    callback = software_updates.subtask()
    header = [
              installed_device_software.subtask(device_id), 
              latest_device_software.s(device_id) 
             ]
    result = chord(header)(callback)
    return result.get()