python gevent 协程的问题

first_time = time.time()
        for j in range(1, 45): #总共876北京城市的
          if 1 <= j<= 44:
            threads = [gevent.spawn(self.Orange_Financing_Merge, i, "北京") for i in range(1, 20)]
            gevent.joinall(threads)
            print("\033[0;31m%s\033[0m" % ">>>>>>>>>>>>>>>>>>>>>page %d>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" % (i))


          else:
            start_time = time.time()
            threads = [gevent.spawn(self.Orange_Financing_Merge, i, "北京") for i in range(1, 16)]
            gevent.joinall(threads)
            end_time = time.time()
            print("总计时间为%d" % (end_time - start_time))
        second_time = time.time()
        

我现在是网页页数是876 页,但是现在我想gevent 异步 并发量是20 ,想40多秒写完,如何去写,我这样写的有问题吗?

阅读 1.8k
1 个回答

gevent.joinall
英文解释:Wait for the greenlets to finish.
中文解释:等待协程结束

例子:


In [1]: import gevent

In [2]: def solve(i):
   ...:     return i
   ...: 

In [3]: threads = [gevent.spawn(solve,i) for i in range(1,10)]

In [4]: gevent.joinall(threads)
Out[4]: 
[<Greenlet at 0x10eaa8b90>,
 <Greenlet at 0x10eaa8d70>,
 <Greenlet at 0x10eaa8e10>,
 <Greenlet at 0x10eaa8550>,
 <Greenlet at 0x10eaa8a50>,
 <Greenlet at 0x10eaa8690>,
 <Greenlet at 0x10eaa8eb0>,
 <Greenlet at 0x10eaa8f50>,
 <Greenlet at 0x10eaa8c30>]

In [5]: print([t.value for t in threads])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题