[Python | CS基础 ]Python多线程`threading`和多历程`multiprocessing` ...

打印 上一主题 下一主题

主题 1879|帖子 1879|积分 5637

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
多线程和多历程的Python实现

1. 多线程实现

1.1 原理



  • Python的多线程模块**threading**答应程序并发实行多个任务。
  • 由于全局表明器锁(GIL),Python的线程可能无法实现真正的并行实行,适合I/O密集型任务。
1.2 示例代码

  1. import threading
  2. import time
  3. # 定义线程要执行的函数
  4. def print_numbers(threadName, delay):
  5.     count = 0
  6.     while count < 5:
  7.         time.sleep(delay)
  8.         count += 1
  9.         print(f"{threadName}: {count}")
  10. # 创建线程对象
  11. thread1 = threading.Thread(target=print_numbers, args=("Thread-1", 1,))
  12. thread2 = threading.Thread(target=print_numbers, args=("Thread-2", 2,))
  13. # 启动线程
  14. thread1.start()
  15. thread2.start()
  16. # 等待线程执行结束
  17. thread1.join()
  18. thread2.join()
复制代码
1.3 代码表明



  • print_numbers函数接受线程名称和延迟时间作为参数,并在循环中打印数字。
  • threading.Thread创建线程对象,target指定线程要实行的函数,args通报给函数的参数。
  • start()方法启动线程,join()方法期待线程完成。
2. 多历程实现

2.1 原理



  • Python的**multiprocessing**模块答应程序创建多个历程,每个历程有自己的内存空间和Python表明器,可以绕过GIL,适合盘算密集型任务。
2.2 示例代码

  1. from multiprocessing import Process
  2. import time
  3. # 定义进程要执行的函数
  4. def print_numbers(processName, delay):
  5.     count = 0
  6.     while count < 5:
  7.         time.sleep(delay)
  8.         count += 1
  9.         print(f"{processName}: {count}")
  10. # 创建进程对象
  11. process1 = Process(target=print_numbers, args=("Process-1", 1,))
  12. process2 = Process(target=print_numbers, args=("Process-2", 2,))
  13. # 启动进程
  14. process1.start()
  15. process2.start()
  16. # 等待进程执行结束
  17. process1.join()
  18. process2.join()
复制代码
2.3 代码表明



  • print_numbers函数接受历程名称和延迟时间作为参数,并在循环中打印数字。
  • Process创建历程对象,target指定历程要实行的函数,args通报给函数的参数。
  • start()方法启动历程,join()方法期待历程完成。
3. 休眠的作用

3.1 原因



  • 模仿耗时利用:模仿文件读写、网络通讯等耗时任务。
  • 克制过快实行:减慢实行速率,便于观察输出。
  • 展示并发效果:增加线程切换机会,展示并发实行效果。
  • 克制资源竞争:减少同时访问共享资源的可能性。
  • 控制实行顺序:通过调解休眠时间,影响实行顺序。
  • 测试和调试:帮助开发者理解实行流程,定位题目。
3.2 示例代码中的休眠



  • 在多线程和多历程的示例代码中,time.sleep(delay)用于休眠指定的时间(秒),其中delay是通报给函数的参数。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宝塔山

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表