对于可伸缩程序来说永远是一个循环不好吗?

时间:2012-08-29 19:21:36

标签: python scalability gevent

假设我需要检索作业状态,并生成一个新线程来处理作业计算:

def post_view(request):
     g = Greenlet.spawn(heavy_job, arg1, arg2)
     return json.dumps(default_response)

然后在heavy_job

def heavy_job(...):
   # call a 3rd party service to start doing its job
   job_id = (....)

   request.session['heavy_job_status'] = 'Running'
   status = 'Running'
   while status == 'Running':
       # ask the 3rd party guy "are you still running"
       resp = 3rdparty-service.query(job_id, ....)
       if resp != 'Running':
          return resp
       time.sleep(5)  # we will monkey patch the time with gevent's timer so no locking

这种while循环方法是否真的不适合缩放?或者我更愿意在每个ajax请求进入时查询第三方服务?

1 个答案:

答案 0 :(得分:1)

很抱歉,我还不能写评论,所以我在这里写了一篇关于Joel Cornett的评论的说明,其中包括'while'和'for'的时间示例。

这个例子中有一个错误:timeit()方法只执行一次初始化代码,但是主代码 - 很多次,所以使用'while'循环每次执行除了第一个执行没有因为'i的值' '已经是10.你可以改变10为100或1000并且没有时间差异(但不是'for'循环)。您还可以在'while'之前添加'i = 0',并看到非常不同的结果。

但是,我认为,对于你的代码并不重要,因为3rdparty-service.query()可能比'for'和'while'循环之间的差异花费更多的时间。