Celery如何使用Python运行多个任务如此缓慢?

2024-09-27 00:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的芹菜从amqp开始

     -------------- celery@tty-Gazelle-Professional v3.0.19 (Chiastic Slide)
     ---- **** ----- 
     --- * ***  * -- Linux-3.8.0-25-generic-x86_64-with-Ubuntu-13.04-raring
     -- * - **** --- 
     - ** ---------- [config]
     - ** ---------- .> broker:      amqp://guest@localhost:5672//
     - ** ---------- .> app:         proj.celery:0x25ed510
     - ** ---------- .> concurrency: 8 (processes)
     - *** --- * --- .> events:      OFF (enable -E to monitor this worker)
     -- ******* ---- 
     --- ***** ----- [queues]
     -------------- .> celery:      exchange:celery(direct) binding:celery

有一个功能:

^{pr2}$

所以我把这个函数作为芹菜的一个任务,并与串行计算进行了比较

序列号:

    [prime(i) for i in xrange(10, 100000)]

与芹菜平行:

    from celery import *

    g = group(prime.s(i) for i in xrange(10, 100000))
    res = g.apply_async()

当我在后端应用_async()时,结果会很快显示在终端屏幕上,如:

[2013-06-20 16:34:56238:INFO/MainProcess]任务项目任务。做什么工作[989be06b-c4f3-4876-9311-2f5f813857d5]0.0166230201721s:99640324成功 [2013-06-20 16:34:56241:INFO/MainProcess]任务项目任务。做什么工作[6eaa9b85-7ba2-4397-b6ae-cbb5668633d4]在0.0123620033264中成功:99740169 [2013-06-20 16:34:56242:INFO/MainProcess]任务项目任务。做什么工作[1f5f6302-94a3-4937-9914-14690d856a5d]0.00850105285645s:99780121成功 [2013-06-20 16:34:56244:INFO/MainProcess]任务项目任务。做什么工作[b3735842-a49c-48a3-8a9e-fab24c0a6c23]0.0102620124817s:99820081成功 [2013-06-20 16:34:56245:INFO/MainProcess]任务项目任务。做什么工作[98eec31a-52eb-4752-92af-6956c0e6f130]成功0.00973200798035s:99880036 [2013-06-20 16:34:56245:INFO/MainProcess]任务项目任务。做什么工作[011a1e99-b307-480b-9765-b1a472dbfa8c]0.0115168094635s成功:99800100 [2013-06-20 16:34:56245:INFO/MainProcess]任务项目任务。做什么工作[f3e3a89f-de79-4ab0-aab7-0a71fe2ab2f7]0.010409116745s:99840064成功 [2013-06-20 16:34:56246:INFO/MainProcess]任务项目任务。做什么工作[61baef04-03c2-4810-bf6a-ae7aa75b80b4]0.0112910270691s:99860049成功

但是当我想在芹菜里得到结果的时候

    res.get()

它运行得非常慢,比串行运行慢得多。有什么问题吗?是不是因为芹菜组的收获慢?我怎样才能解决这个问题?在


Tags: 项目ininfoamqpforasyncresprime
1条回答
网友
1楼 · 发布于 2024-09-27 00:19:20

如果你计时资源获取()手术你会注意到(我希望是真的),那总是大约500毫秒。这是因为异步结果.get必须每隔N毫秒轮询一次结果。您可以通过为get,interval提供其他参数来调整此值:

res.get(interval=0.005)  

您可以获得更多信息in documentation和{a2}。请注意,芹菜不是RPC类通信的最佳解决方案,因为对结果的轮询会导致很大的性能损失。在

My own question

相关问题 更多 >

    热门问题