python asyncio 实现协程,python async 多线程

  python asyncio 实现协程,python async 多线程

  前面的代码都是异步的,就如睡觉,需要用睡眠而不是阻塞的时间.睡眠,如果有同步逻辑,怎么利用异步超正析象管(Image Orthicon)实现并发呢?答案是用运行执行程序.在一开始我说过开发者创建将来的对象情况很少,主要是用运行执行程序,就是让同步函数在一个执行器(遗嘱执行人)里面运行。

  同步代码

  德发():

  时间.睡眠(1)

  返回" a "

  asyncdefb():

  awaitasyncio.sleep(1)

  返回" b "

  defshow_perf(func):

  打印( **20)

  start=time.perf_counter()

  asyncio.run(func())

  打印(f"{ func ._ _ name _ _ }花费: { time。perf _ counter()-start } )

  asyncdefc1():

  loop=asyncio.get_running_loop()

  awaitasyncio.gather(

  loop.run_in_executor(None,a),

  乙()

  )

  In:show_perf(c1)

  ********************

  成本10000 .058686868615可以看到用运行进入执行者可以把同步函数逻辑转化成一个协程,且实现了并发。这里要注意细节,就是函数一是普通函数,不能写成协程,下面的定义是错误的,不能实现并发:

  asyncdefa():

  时间.睡眠(1)

  返回" a "因为一里面没有异步代码,就不要用异步定义来定义。需要把这种逻辑用循环运行执行程序封装到协程:

  asyncdefc():

  loop=asyncio.get_running_loop()

  returnwaitloop。run _ in _ executor(无,a)大家理解了吧?

  loop.run _ in _执行器(无,a)这里面第一个参数是要传递并发.未来.执行者实例的,传递没有人会选择默认的执行者:

  In:loop ._默认_执行者

  出:并发。期货。线程。0x 112 b 60 e 80处的threadpoolexecutor当然我们还可以用进程池,这次换个常用的文件读写例子,并且用:

  asyncdefc3():

  loop=asyncio.get_running_loop()

  伴随着电流。期货。processpoolexecutor()as :

  print(awaitasyncio.gather(

  loop.run_in_executor(e,a),

  乙()

  ))

  In:show_perf(c3)

  ********************

  [A , B]

  c3s成本36860 .68868886861

  下一节:深究计算机编程语言中的异步超正析象管(Image Orthicon)库-线程池

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: