代码之家  ›  专栏  ›  技术社区  ›  Chris R

当任务结果很大时,我应该如何使用芹菜?

  •  5
  • Chris R  · 技术社区  · 15 年前

    处理在芹菜中执行的任务的最好方法是什么?我在考虑表转储之类的事情,在这里我可能返回数百兆字节的数据。

    我认为将消息塞进结果数据库的天真方法在这里对我没有用,更不用说使用AMQP作为结果后端了。但是,我有一些延迟是一个问题;根据导出的特定实例,有时我必须阻止,直到它返回并直接从任务客户机发出导出数据(导出内容的HTTP请求进来了,它不存在,但是 必须 作为对该请求的回应。。。不管需要多长时间)

    那么,为这个任务编写任务的最佳方式是什么?

    2 回复  |  直到 15 年前
        1
  •  4
  •   Alec Thomas    15 年前

    一种选择是在所有工作机上运行一个静态HTTP服务器。然后,您的任务可以将大结果转储到静态根目录中的唯一文件,并返回对该文件的URL引用。然后,接收器可以在空闲时获取结果。

    有点像这样:

    @task
    def dump_db(db):
      # Some code to dump the DB to /srv/http/static/db.sql
      return 'http://%s/%s.sql' % (socket.gethostname(), db)
    

    当然,您需要一些方法来获取旧文件,以及保证唯一性,可能还有其他问题,但是您得到了一般的想法。

        2
  •  1
  •   Henry Crutcher    12 年前

    我通过构造我的应用程序将多兆字节的结果写入文件来处理这个问题,然后我将它们映射到内存中,以便在使用这些数据的所有进程之间共享它们。。。这完全解决了如何将结果发送到另一台机器的问题,但是如果结果太大,听起来这些任务是服务器进程之间协调的内部任务。

    推荐文章