python自動化の道-day 10
10660 ワード
:
1.
2.
3.
4. io
greenlet c , python yield,
, generator
# -*- coding:utf-8 -*-
from greenlet import greenlet
# import greenlet
import time
def test1():
print("tes1 _1")
g2.switch()
time.sleep(3)
print("tes1 _2")
g2.switch()
def test2():
print("test2 _1")
g1.switch()
# time.sleep(1)
print("test2 _2")
if __name__ == '__main__':
g1=greenlet(test1) # greenlet ,
g2=greenlet(test2)
g1.switch() # greenlet
2.≪インスタンス|Instance|emdw≫
: ,
: , , ,
, + + : cpu 。
: , , cpu ,
cpu , , cpu 。
(blocking) (IO )
# yield
import time
import queue
def consumer(name):
print("--->starting eating baozi")
while True:
new_baozi = yield
print("[%s] is eating [%s]"%(name,new_baozi))
def producer(name):
print("--->starting making baozi")
r1 =c1.__next__()
r2 =c2.__next__()
# print( c2.__next__())
while True:
print("[%s] is making baozi"%name)
c1.send("baozi")
c2.send("baozi")
time.sleep(1)
if __name__ == '__main__':
c1 = consumer("zhangsan_1")
c2 = consumer("zhangsan_2")
p = producer("lisi")
3.Gevent
"""
Gevent , gevent , gevent
greenlet, c python 。greenlet
, 。
gevent , yielding . ,
, gevent.sleep(1), yield 。
"""
import gevent
def func1():
print("\033[31;1m func1_1 \033[0m")
gevent.sleep(3)
print("\033[31;1m func1_2 \033[0m")
def func2():
print("\033[31;1m func2_1 \033[0m")
gevent.sleep(1)
print("\033[31;1m func2_2 \033[0m")
gevent.joinall( # wait,
[
gevent.spawn(func1),
gevent.spawn(func2)
]
)
4.
#_*_ coding:utf-8 _*_ import gevent def task(pid): gevent.sleep(1) print("task %s done"%pid) def sync(): for i in range(1,10): task(i) def async(): threads = [gevent.spawn(task,i)for i in range(10)] gevent.joinall(threads) print("sync") sync() print("----------->") print("async") async() """ task Greenlet gevent.spawn。 greenlet
5.IOブロック自動切替タスクthreads , gevent.joinall , , greenlet。 greenlet 。 """
:
#_*_ coding:utf-8 _*_ from urllib.request import urlopen from gevent import monkey monkey.patch_all() import gevent def f(url): print("GET:%s"%url) resp =urlopen(url) data = resp.read() print("%d bytes received from %s"%(len(data),url)) gevent.joinall( [ gevent.spawn(f,"http://www.xiaohuar.com/"), gevent.spawn(f,"https://www.yahoo.com/"), gevent.spawn(f,"https://github.com/") ] ) """ """
gevent :http://xlambda.com/gevent-tutorial/#_7