提交任务的两种方式:同步调用与异步调用python
# 同步调用:提交任务后,就在原地等待任务执行完毕,拿到结果,再执行下一行代码.致使程序是串行执行 import time import random from concurrent.futures import ThreadPoolExecutor def work(name): print("%s is working" % name) time.sleep(random.randint(7, 13)) res = random.randint(7, 13) * "#" return {"name": name, "res": res} def weigh(job): name = job["name"] size = len(job["res"]) print("%s 工做量 <%s>" % (name, size)) if __name__ == "__main__": pool = ThreadPoolExecutor(13) # 人员数目 job1 = pool.submit(work, "alex").result() weigh(job1) job2 = pool.submit(work, "jack").result() weigh(job2) job3 = pool.submit(work, "egon").result() weigh(job3)
使程序编程串行编程
异步调用dom
# 异步调用:提交完任务后,不等待任务执行完毕, import time import random from concurrent.futures import ThreadPoolExecutor def work(name): print("%s is working" % name) time.sleep(random.randint(7, 13)) res = random.randint(7, 13) * "#" return {"name": name, "res": res} def weigh(job): job = job.result() name = job["name"] size = len(job["res"]) print("%s 工做量 <%s>" % (name, size)) if __name__ == "__main__": pool = ThreadPoolExecutor(13) # 人员数目 job1 = pool.submit(work, "alex").add_done_callback(weigh) # pool.submit(work, "alex")这个对象看成结果传给weigh job2 = pool.submit(work, "jack").add_done_callback(weigh) job3 = pool.submit(work, "egon").add_done_callback(weigh)
阻塞:是进程运行的一种状态,进程运行是碰到I/O就进行阻塞状态,会被剥夺走cpu的执行权限。异步
同步不一样于阻塞,同步:是提交任务的一种方式,若是提交的任务是一个纯计算的同步,没有I/O,提交后要等,没有阻塞。spa