import threading from time import sleep,ctime loops=[4,2] class MyThread(threading.Thread): def init(self,func,args,name=''): threading.Thread.init(self) self.name = name self.func = func self.args = args def run(self): self.func(*self.args) def loop(nloop,nsec): print('开始循环',nloop,'在:',ctime()) sleep(nsec) print('结束循环',nloop,'于:',ctime()) def main(): print('程序开始于:',ctime()) threads = [] nloops = range(len(loops)) for i in nloops: t = MyThread(loop,(i,loops[i]),loop.name) threads.append(t) for i in nloops: threads[i].start() for i in nloops: threads[i].join() print('所有的任务完成于:',ctime()) if name =='main': main() 每一行代码的意思和作用
时间: 2023-06-26 18:09:18 浏览: 99
C#利用System.Threading.Thread.Sleep即时输出信息的详解
5星 · 资源好评率100%
代码主要实现了多线程的功能,以下是每一行代码的意思和作用:
1. `import threading` 导入 threading 模块
2. `from time import sleep, ctime` 导入 sleep 和 ctime 函数
3. `loops=[4,2]` 定义一个列表,包含每个线程需要循环的次数
4. `class MyThread(threading.Thread):` 定义一个继承自 threading.Thread 的自定义线程类 MyThread
5. `def __init__(self, func, args, name=''): threading.Thread.__init__(self)` 定义初始化方法,接收参数 func, args, name
6. `self.name = name` 将 name 赋值给 self.name
7. `self.func = func` 将 func 赋值给 self.func
8. `self.args = args` 将 args 赋值给 self.args
9. `def run(self):` 定义 run 方法,该方法会在线程启动时被调用
10. `self.func(*self.args)` 调用 func 函数,传入 args 参数
11. `def loop(nloop, nsec):` 定义 loop 函数,接收参数 nloop 和 nsec
12. `print('开始循环', nloop, '在:', ctime())` 输出开始循环的信息和当前时间
13. `sleep(nsec)` 线程休眠 nsec 秒
14. `print('结束循环', nloop, '于:', ctime())` 输出结束循环的信息和当前时间
15. `def main():` 定义主函数
16. `print('程序开始于:', ctime())` 输出程序开始的信息和当前时间
17. `threads = []` 创建一个空的线程列表
18. `nloops = range(len(loops))` 创建一个包含列表 loops 中元素数量的 range 对象
19. `for i in nloops:` 遍历 range 对象
20. `t = MyThread(loop, (i, loops[i]), loop.name)` 创建一个 MyThread 类的实例 t,传入 loop 函数、元组 (i, loops[i]) 和 loop.name 参数
21. `threads.append(t)` 将 t 实例添加到线程列表中
22. `for i in nloops:` 遍历 range 对象
23. `threads[i].start()` 启动线程
24. `for i in nloops:` 遍历 range 对象
25. `threads[i].join()` 等待线程结束
26. `print('所有的任务完成于:', ctime())` 输出所有任务完成的信息和当前时间
27. `if __name__ == '__main__':` 如果当前模块为主模块
28. `main()` 调用主函数
阅读全文