我一直在努力通过RabbitMQ使一些分布式任务得以运行。
我花了一些时间尝试让Celery完成我想做的事情,但无法使其工作。
然后我尝试使用Pika,事情就顺畅地在几分钟内解决了。
如果使用Pika而不是Celery,是否会有什么遗漏呢?
我一直在努力通过RabbitMQ使一些分布式任务得以运行。
我花了一些时间尝试让Celery完成我想做的事情,但无法使其工作。
然后我尝试使用Pika,事情就顺畅地在几分钟内解决了。
如果使用Pika而不是Celery,是否会有什么遗漏呢?
Celery内置了许多功能,超出了pika的范围。您可以查看Celery文档以了解其可以执行的操作类型,这里是一个示例:
>>> from proj.tasks import add
>>> res = add.chunks(zip(range(100), range(100)), 10)()
>>> res.get()
[[0, 2, 4, 6, 8, 10, 12, 14, 16, 18],
[20, 22, 24, 26, 28, 30, 32, 34, 36, 38],
[40, 42, 44, 46, 48, 50, 52, 54, 56, 58],
[60, 62, 64, 66, 68, 70, 72, 74, 76, 78],
[80, 82, 84, 86, 88, 90, 92, 94, 96, 98],
[100, 102, 104, 106, 108, 110, 112, 114, 116, 118],
[120, 122, 124, 126, 128, 130, 132, 134, 136, 138],
[140, 142, 144, 146, 148, 150, 152, 154, 156, 158],
[160, 162, 164, 166, 168, 170, 172, 174, 176, 178],
[180, 182, 184, 186, 188, 190, 192, 194, 196, 198]]
range(0, 100)
,y在range(0,100)
)相加。它通过使用一个名为add
的任务来实现,该任务将两个数字相加,并将1+1
、2+2
、3+3
等的相加工作分成10个一组,并将每个组分配给可用的Celery工作进程。每个工作进程将在其10个项目块上运行add
,直到完成所有工作。然后通过res.get()
调用收集结果。我相信您可以想象出使用pika进行此操作的方法,但我也相信您可以想象出需要多少工作量。您可以通过使用Celery获得这些功能。