【发布时间】:2021-12-25 22:45:52
【问题描述】:
我有一个与外部 API 对话的任务,json 响应非常大,我必须多次进行此调用,然后进行进一步的 python 处理。为了减少耗时,我最初尝试过:
def make_call(*args, **kwargs):
pass
def make_another(*args, **kwargs):
pass
def get_calls():
return make_call, make_another
def task(*args, **kwargs):
procs = [Process(target=get_calls()[i], args=(,),
kwargs={}) for i in range(3)]
_start = [proc.start() for proc in procs]
_join = [proc.join() for proc in procs]
#
transaction.on_commit(lambda: task.delay())
但是,我遇到了AssertionError: daemonic processes are not allowed to have child。通过额外的流程加快 celery 任务的最佳方法是什么?
【问题讨论】:
-
为什么还要单独/子调用?这是一个异步任务,所以它是否需要一段时间并不重要
-
@lain 对这个问题有点不屑一顾,不是一个很好的论点,也不是对提问者有帮助。如果一个任务可以并行化,比如在多个 CPU 内核或多个 I/O 流上,你为什么要让它比必要的时间更长呢?它可能会对应用程序中的用户响应能力产生很大影响。比如说,一个用户等待 10 秒来处理一个长任务而不是 30 秒或更长时间。
标签: python django concurrency multiprocessing celery