1.新线程中处理协程,防止主线程被阻塞.
注意asyncio.call_soon_threadsafe调用的是普通函数
# coding=utf-8
import asyncio
import time
import threading
gLock = threading.Lock()
gStart = time.time()
def pinfo(text):
global gLock
gLock.acquire()
print(text)
gLock.release()
def startLoop(loop):
asyncio.set_event_loop(loop)
loop.run_forever()
def moreWork(name, x):
global gStart
pinfo("moreWork:start name={} {}, {}".format(name, x, time.time()-gStart))
time.sleep(x)
pinfo("moreWork:endxx name={} {}, {}".format(name, x, time.time()-gStart))
if __name__ == "__main__":
loop = asyncio.new_event_loop()
t = threading.Thread(target=startLoop, args=(loop,))
t.start()
pinfo("main:middle")
loop.call_soon_threadsafe(moreWork, "h1", 6)
pinfo("main:h1 {}".format(time.time()-gStart))
loop.call_soon_t