当前位置:   article > 正文

多线程爬虫基础代码

多线程爬虫基础代码
  1. #导入线程模块
  2. import threading
  3. def coding(): #定义 coding 函数,用于打印字符串 "aaa" 十次
  4. for i in range(10):
  5. print("aaa")
  6. def ac(): #定义 ac 函数,用于打印字符串 "bbbb" 十次:
  7. for j in range(10):
  8. print("bbbb")
  9. def main(): #定义 main 函数,用于创建并启动两个线程:
  10. # 创建第一个线程,目标函数是 coding
  11. t1 = threading.Thread(target=coding)
  12. # 创建第二个线程,目标函数是 ac
  13. t2 = threading.Thread(target=ac)
  14. t1.start() # 启动第一个线程
  15. t2.start() # 启动第二个线程
  16. if __name__ == '__main__': #在 __main__ 中调用 main 函数:
  17. main()

这段代码创建了两个线程,一个用于执行 coding 函数,另一个用于执行 ac 函数。每个函数都简单地打印了一段字符串多次。主函数 main 中创建了这两个线程,并启动它们,使它们可以并发地执行。


 

  1. # 定义第一个线程类
  2. import threading
  3. class MyThread(threading.Thread):
  4. # 重写 run 方法
  5. def run(self):
  6. # 循环打印 "bbbb" 十次
  7. for j in range(10):
  8. print("bbbb")
  9. # 定义第二个线程类
  10. class YourThread(threading.Thread):
  11. # 重写 run 方法
  12. def run(self):
  13. # 循环打印 "aaa" 十次
  14. for i in range(10):
  15. print("aaa")
  16. # 主函数
  17. def main():
  18. # 创建 YourThread 的实例
  19. t1 = YourThread()
  20. # 创建 MyThread 的实例
  21. t2 = MyThread()
  22. # 启动第一个线程
  23. t1.start()
  24. # 启动第二个线程
  25. t2.start()
  26. # 当前文件被直接运行时执行主函数
  27. if __name__ == "__main__":
  28. main()

这段代码创建了两个线程类 MyThread 和 YourThread,它们都继承自 threading.Thread 类,并重写了 run() 方法。在 MyThread 类中,run() 方法会打印字符串 "bbbb" 十次,而在 YourThread 类中,run() 方法会打印字符串 "aaa" 十次。
在 main() 函数中,创建了一个 YourThread 类的实例 t1 和一个 MyThread 类的实例 t2。然后分别调用了它们的 start() 方法,以启动两个线程并发执行。
这段代码的执行结果会交替输出 "aaa" 和 "bbbb" 字符串,每个字符串各输出十次,因为两个线程是并行执行的。
这种方式可以更好地组织代码,将线程相关的逻辑封装在类中,提高了代码的可维护性 


  1. import threading
  2. # 全局变量 a 初始化为 0
  3. a = 0
  4. # 创建一个线程锁对象
  5. lock = threading.Lock()
  6. # 定义一个函数,该函数将对全局变量 a 执行增加 1000 次的操作
  7. def add_a():
  8. global a # 声明 a 为全局变量
  9. for i in range(1000):
  10. # 获取线程锁,确保线程安全
  11. lock.acquire()
  12. # 对全局变量 a 执行加一操作
  13. a += 1
  14. # 打印增加后的值
  15. print(a)
  16. # 释放线程锁,允许其他线程获取锁
  17. lock.release()
  18. # 主函数,创建两个线程并启动它们
  19. def main():
  20. for j in range(2):
  21. # 创建线程,并指定目标函数为 add_a
  22. t = threading.Thread(target=add_a)
  23. # 启动线程
  24. t.start()
  25. # 如果当前文件被直接执行,则调用主函数
  26. if __name__ == "__main__":
  27. main()

 此代码创建了两个线程,每个线程执行 add_a 函数,该函数会对全局变量 a 进行增加 1000 次的操作。为了确保在多线程环境中对 a 的修改是线程安全的,使用了 threading.Lock 对象 lock。这样,每个线程在修改 a 之前会获取锁,修改完成后释放锁,确保其他线程不会同时访问和修改 a,从而避免了竞态条件(Race Condition)的发生。在主函数 main 中,创建了两个线程,并启动它们,以便同时执行 add_a 函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/192970
推荐阅读
相关标签
  

闽ICP备14008679号