gevent_test异步

简介

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# coding:utf-8

import time,random
import asyncio,os
import gevent

def gevent_a():
for i in range(5):
print(i,'a gevent',os.getpid())
gevent.sleep(random.random()*2)
return 'gevent a result'

def gevent_b():
for i in range(5):
print(i,'b gevent ',os.getpid())
gevent.sleep(random.random()*2)
return 'genvent b result'
#

# async def a():

# for i in range(4):

# print(i,'a',os.getpid())

# # time.sleep(random.random()*2) # 如果使用time的sleep 是CPU级别的阻塞。

# await asyncio.sleep(random.random()*2) # 使用异步就要所有环境都使用上异步。

# return 'a function'

#

# async def b():

# for i in range(4):

# print(i,'b',os.getpid())

# await asyncio.sleep(random.random() * 2)

# return 'b function'

#

# async def main():

# result = await asyncio.gather(

# a(),

# b()

# )

# #print(result) # 这里result就打印的是列表。

# print(result[0],result[1]) # 按gather内的0,1索引打印列表内的值。

if __name__=='__main__':
start = time.time()
g_a = gevent.spawn(gevent_a)
g_b = gevent.spawn(gevent_b)
gevent_list = [g_a,g_b]
result = gevent.joinall(gevent_list)
print('result is : ',result )
print(dir(result[0]))
print(result[0].value) # 异步有返回值。
# asyncio.run(main())
print('运行时间是: ',time.time() - start) # 不用异步是6秒左右。异步后4秒。
print('parant is %s' % os.getpid())