多工 攜程

2021-09-30 01:23:33 字數 3071 閱讀 6049

1、協程

1.1 協程是啥

yield

import time

deftask1()

:while

true

:print

("---1----"

) time.sleep(

0.1)

yield

deftask2()

:while

true

:print

("---2----"

) time.sleep(

0.1)

yield

defmain()

: t1 = task1(

) t2 = task2(

)# 先讓t1執行一會,當t1中遇到yield的時候,再返回到26行,

# 然後執行t2,當它遇到yield的時候,再次切換到t1中

# 這樣t1/t2/t1/t2的交替執行,最終實現了多工....協程

while

true

:next

(t1)

next

(t2)

if __name__ ==

"__main__"

: main(

)

greenlet

from greenlet import greenlet

import time

deftest1()

:while

true

:print

("---a--"

)# 切換到test2()中執行

gr2.switch(

) time.sleep(

0.5)

deftest2()

:while

true

:print

("---b--"

)# 切換到test1()中執行

gr1.switch(

) time.sleep(

0.5)

gr1 = greenlet(test1)

gr2 = greenlet(test2)

# 切換到gr1中執行

gr1.switch(

)

gevent

import gevent

# import time

deff1

(n):

for i in

range

(n):

# gevent.getcurrent() 獲取當前變數的記憶體位址

print

(gevent.getcurrent(

), i)

# time.sleep(0.5)

# 遇到延時就切換

gevent.sleep(

0.5)

deff2

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

# time.sleep(0.5)

gevent.sleep(

0.5)

deff3

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

# time.sleep(0.5)

gevent.sleep(

0.5)

print

("----1---"

)g1 = gevent.spawn(f1,5)

print

("----2---"

)g2 = gevent.spawn(f2,5)

print

("----3---"

)g3 = gevent.spawn(f3,5)

print

("----4---"

)# 等待執行結束

g1.join(

)g2.join(

)g3.join(

)

打補丁

import gevent

import time

from gevent import monkey

monkey.patch_all(

)def

f1(n)

:for i in

range

(n):

print

(gevent.getcurrent(

), i)

time.sleep(

0.5)

deff2

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

time.sleep(

0.5)

deff3

(n):

for i in

range

(n):

print

(gevent.getcurrent(

), i)

time.sleep(

0.5)

print

("----1---"

)g1 = gevent.spawn(f1,5)

print

("----2---"

)g2 = gevent.spawn(f2,5)

print

("----3---"

)g3 = gevent.spawn(f3,5)

print

("----4---"

)g1.join(

)g2.join(

)g3.join(

)

多工 執行緒池 攜程池

多工 執行緒池 from queue import queue from multiprocessing.dummy import pool 資料佇列 self.data queue queue self.pool pool def run more task self,func,count 1 把...

多工 協程

示例 import time defwork1 while true print 正在掃地 yield defwork2 while true print 正在搬磚 yield w1 work1 w2 work2 協程肯定是併發執行 while true next w1 next w2 greenl...

ios多工程依賴

匯入準備工作 1.建立乙個framework library cocoa touch static library 取名a,並在a裡新建乙個類用來測試 2.建立乙個demo工程b 3.把工程a整個資料夾複製到b工程資料夾裡,位置隨便選 只要你會新增標頭檔案搜尋路勁,如果不會,建議去另一篇教程學習 4...