账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    python gevent 协程的问题
    47
    0
    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多秒写完,如何去写,我这样写的有问题吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 在Python中,Greenlet是一个轻量级的线程库,用于简化线程编程。在Greenlet中,可以创建新的线程、共享资源等。

      在使用Greenlet时,需要注意以下几点:

      1. 线程之间的同步问题:在Greenlet中,线程的同步主要是通过全局变量和事件循环来实现的。但是,全局变量的更新可能会阻塞其他线程,因此需要特别注意线程的同步。

      2. 线程的优先级问题:Greenlet的优先级是通过线程调度器来确定的。如果线程的优先级比当前调度器的优先级高,那么它就会被调度器调度;如果线程的优先级比当前调度器的优先级低,那么它就会被阻塞,直到调度器重新调度。

      3. 线程的生命周期问题:Greenlet的生命周期是由Greenlet的调度器决定的。Greenlet调度器可能会定期地回收已经结束的Greenlet。

      4. 线程的异常处理问题:在Greenlet中,异常处理主要是通过try-except语句来实现的。如果在Greenlet中抛出了异常,那么异常会被传递给try-except语句中的except块来处理。

      以下是一个简单的Greenlet的例子:

      ```python import greenlet

      def my_function(): # 这里是需要被Greenlet共享的资源 shared_resource = 0

      def my_task():
          global shared_resource
          shared_resource += 1
      
      my_task()
      print("shared_resource:", shared_resource)
      

      g = greenlet.Greenlet(my_task) g.join() ```

      在这个例子中,my_task函数需要被Greenlet共享的资源shared_resource。在my_task函数中,我们首先更新shared_resource的值,然后调用my_task函数。在my_task函数中,我们调用了一个共享资源的函数,该函数使用了共享资源。最后,我们调用join()方法来等待所有线程完成。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部