又一次戳中G點 試駕眾泰大邁X7 1 8T

時間 2021-06-05 17:02:31

1樓:Torein

如果是自己寫的同步方法,可以用ThreadPoolExecutor來代替執行,然後讓主線程的event_loop等待結果。

def write_db():

time.sleep(5)

async def main():

pool = ThreadPoolExecutor()await asyncio.get_event_loop().run_in_executor(pool, write_db)

if __name__ == "__main__":

asyncio.run(main())

參考asyncio.loop.run_in_executor

2樓:Theodore

@tonnie 講了如何把乙個物件包裝成awaitable的(即讓它成為協程),我想再提醒一下,協程(coroutine)不等於非同步(asynchonous),這種方法並不能將原來不支援非同步的操作變成非同步操作

比如time.sleep()這個非非同步的操作,即使將它包裝為協程,它還是非同步阻塞的

import

time

import

asyncio

async

defnon_asyn_sleep(i

):time

.sleep(1

)print

("Synchonous coroutine {} sleeps 1s"

.format(i

))async

defasyn_sleep(i

):await

asyncio

.sleep(1

)print

("asynchonous coroutine {} sleep 1s"

.format(i

))def

supervisor(f

):t0

=time

.time

()futures=[

f(i)

fori

inrange(5

)]wait_list

=asyncio

.wait

(futures

)loop

=asyncio

.get_event_loop

()loop

.run_until_complete

(wait_list

)print

("Time Elapsed: s\n"

.format

(time

.time()-

t0))

if__name__

=="__main__"

:supervisor

(non_asyn_sleep

)supervisor

(asyn_sleep

)輸出:

python3

asysleep.py

Synchonous

coroutine

2sleeps1s

Synchonous

coroutine

1sleeps1s

Synchonous

coroutine

0sleeps1s

Synchonous

coroutine

3sleeps1s

Synchonous

coroutine

4sleeps1s

Time

Elapsed:5

.02sasynchonous

coroutine

2sleep1s

asynchonous

coroutine

1sleep1s

asynchonous

coroutine

0sleep1s

asynchonous

coroutine

4sleep1s

asynchonous

coroutine

3sleep1s

Time

Elapsed:1

.01s因此,如果想要通過協程實現非同步提公升I/O效率,正確的做法是使用實現了非同步協議的庫,而不是思考如何將『普通操作』包裝成協程

外匯又一次失敗了?

子愚 要想做好交易,第一,不能把它看做是乙個無法超越的東西,如果你這樣想那你必輸無疑,要把它看成你利用的工具 事物 第二,不要把他看做是虛擬的衍生品市場,要把它看成是現實世界中的事物之一 要選擇自己熟悉的事物,並且此事物要有百分之九十的交易市場符合度 你就會行成真真正正的市場理念。到此為止了 先談技...

如何看待酷安又一次整改?

邵同學 作為乙個已經註冊使用1254天的使用者,私以為酷安變得越來越不酷了。有趣的應用越來越少,撕逼的使用者越來越多,你一旦發表乙個不同的意見,就有人問候你全家。 大大大大橙子 唉,回不去了。可以理解酷安官方這一系列做法是保護自己,也是保護使用者。也許是以前太多的縱容導致酷安使用者的素質參差不齊。但...

科二考試掛了一次又一次,什麼體驗?

科二掛了三次了,為科二付出了太多,相信自己第四次一定可以過得!第一次和第二次都是坡起一次距離過大一次壓線。終於第三次正好30厘公尺,結果超時了。前面等了太久,坡起那裡,前面那個人熄火四五次。大家一定都可以考過的! 勤勞的小蜜蜂 今天科目二掛第三次,兩次都是在上坡,一次領線大於30,然後起步的時候,一...