关于线程与主进程的执行顺序
import time import os import threading from concurrent.futures import ThreadPoolExecutor # 线程池 lock = threading.Lock() # 锁 def work(i): lock.acquire() print(i, os.getpid()) time.sleep(1) lock.release() return 'result %s' % i if __name__ == '__main__': print(os.getpid()) # 获取程序的pid t = ThreadPoolExecutor(2) # 创建线程池,参数是设置的线程池的数量 result = [] for i in range(20): t_result = t.submit(work, (i, )) result.append(t_result) for res in result: print(res.result())
在main函数中,第一个for循环是线程池的循环,那个第一个for循环和第二个for循环的执行顺序是怎样的。我理解应该是第一个循环执行完后再去执行第二个循环,main函数为一个主进程,应该是由上而下的执行对吧,而且我理result是一个集合,for循环只执行它一次吧
9
收起
正在回答
1回答
同学,你好!1、在for i in range(20)循环中,执行t.submit(work, (i,))线程池每次执行两个线程,将返回的 Future 对象添加到result列表中。线程执行时for res in result 也在执行,在执行线程过程中运行程序的速度不同, 所以返回的结果的时间也是不同的,若线程执行完有返回值则执行result()获取返回值,没有则等有返回值后再输出
祝学习愉快~
Python全能工程师
- 参与学习 人
- 提交作业 16247 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星