import gevent
def _task(timeout, pid, msg):
print("I'm task %d and want to say: %s" % (pid, msg))
gevent.sleep(timeout)
print("Task %d done." % (pid,))
def test():
g0 = gevent.spawn(_task, 1, 0, 'just 0 test')
g1 = gevent.spawn(_task, 2, 1, 'just 1 test')
g2 = gevent.spawn(_task, 4, 2, 'just 2 test')
gevent.joinall([g0, g1, g2])
print('run end')
test()
from greenlet import greenlet
import time
def test1(gr,g):
for i in range(10):
print("---A--:" + str(i))
gr.switch(g, gr) # 切换到另一个协程执行
time.sleep(0.5)
def test2(gr, g):
for i in range(10):
print("---B--" + str(i))
gr.switch(g, gr)
# gr.throw(AttributeError)
time.sleep(0.5)
if __name__ == '__main__':
# 创建一个协程1
gr1 = greenlet(test1)
# 创建一个协程2
gr2 = greenlet(test2)
# 启动协程
gr1.switch(gr2, gr1)
from greenlet import greenlet
def test1(x,y):
print('begin test1:')
z = gr2.switch(x+y)
print('test1:z:' + str(z))
def test2(u):
print('begin test2')
print('test2:u:' + str(u))
gr1.switch(42)
gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch("hello",'world')
import time
from threading import Thread,RLock,Condition,current_thread
def func1(c):
c.acquire(False) #固定格式
# print(1111)
c.wait() #等待通知,
#time.sleep(3) #通知完成后大家是串行执行的,这也看出了锁的机制了
print('%s执行了'%(current_thread().getName()))
c.release()
if __name__ == '__main__':
c = Condition()
for i in range(5):
t = Thread(target=func1,args=(c,))
t.start()
while True:
num = int(input('请输入你要通知的线程个数:'))
c.acquire() #固定格式
#c.notify(num) #通知num个线程别等待了,去执行吧
c.notifyAll()
#c.notify_all()
c.release()