定时执行greenlet

时间:2018-12-06 17:18:36

标签: python greenlets benchmarking

我有以下功能,由100个greenlet并行执行。

def func(a):
  arg = RpcArg(a=a)
  start = time.time()
  ret = rpc_client.Rpc(arg)
  finish = time.time()
  return (finish - start)

Rpc是对服务器的远程过程调用。目的是计算服务器处理Rpc所花费的时间。使用以下代码段,使用greenlets并行触发请求:

def timer():
  threads = []
  for i in xrange(100):
    threads.append(gevent.spawn(func, a))
  gevent.joinall(threads)

服务器最多可以并行执行5个请求。在服务器上看到的Rpc调用所花费的时间与上述脚本报告的时间明显不同。

根据我的说法,问题是由于在调用rpc_client.Rpc(arg)之后发生绿键切换,这阻塞了操作直到服务器返回值。当其他服务器返回响应并且返回时,重新运行的greenlet将重新生效。因此,在计算完成时间之前,还会增加其他greenlet的开销。

那么,找到在Greenlet中运行的部分或全部功能所花费的正确执行时间的正确方法是什么?

我也浏览了这篇文章:Why the amount of greenlets will impact the elapsed time of the responses

0 个答案:

没有答案
相关问题