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()