Board logo

标题: Python3使用多线程/线程锁 [打印本页]

作者: admin    时间: 2019-9-28 10:10     标题: Python3使用多线程/线程锁

例子一:(函数+多线程)
  1. #coding=utf-8
  2. import _thread #导入多线程模块
  3. from time import sleep #导入sleep()函数
  4. from datetime import datetime #导入datetime模块
  5. date_time_format = '%Y-%m-%d %H:%M:%S' #自定义时间的输出格式
  6. def date_time_str(date_time): #自定义转换时间格式的函数
  7. return datetime.strftime(date_time, date_time_format)
  8. def func1():
  9. print('+++线程一的开始时间:', date_time_str(datetime.now()))
  10. print('+++线程一休眠4秒')
  11. sleep(4)
  12. print('+++线程一的结束时间:', date_time_str(datetime.now()))
  13. def func2():
  14. print('***线程二的开始时间:', date_time_str(datetime.now()))
  15. print('***线程二休眠2秒')
  16. sleep(2)
  17. print('***线程二的结束时间:', date_time_str(datetime.now()))
  18. def func_main():
  19. print('——————进程的开始时间:', date_time_str(datetime.now()))
  20. print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
  21. _thread.start_new_thread(func1,()) #执行线程一
  22. _thread.start_new_thread(func2,()) #执行线程二
  23. sleep(3) #进程休眠3秒后继续执行
  24. print('——————进程的结束时间:', date_time_str(datetime.now()))
  25. print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
  26. if __name__ == '__main__':
  27. func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-16 11:02:52 ——————所有线程的统一开始时间: 2019-02-16 11:02:52 +++线程一的开始时间: 2019-02-16 11:02:52 ***线程二的开始时间: 2019-02-16 11:02:52 +++线程一休眠4秒 ***线程二休眠2秒 ***线程二的结束时间: 2019-02-16 11:02:54 ——————进程的结束时间: 2019-02-16 11:02:55 ——————所有线程的强制结束时间: 2019-02-16 11:02:55 C:\Users\jacky\Desktop> ## 备注:所有线程的开始时间都是一样的;所有线程都会在进程执行结束后,立即强制结束。 ###### 例子二:(函数+多线程)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. def func1():
  9. print('+++线程一的开始时间:', date_time_str(datetime.now()))
  10. print('+++线程一休眠4秒')
  11. sleep(4)
  12. print('+++线程一的结束时间:', date_time_str(datetime.now()))
  13. def func2():
  14. print('***线程二的开始时间:', date_time_str(datetime.now()))
  15. print('***线程二休眠2秒')
  16. sleep(2)
  17. print('***线程二的结束时间:', date_time_str(datetime.now()))
  18. def func_main():
  19. print('——————进程的开始时间:', date_time_str(datetime.now()))
  20. print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
  21. _thread.start_new_thread(func1,()) #执行线程一
  22. _thread.start_new_thread(func2,()) #执行线程二
  23. sleep(4) #进程休眠4秒后继续执行
  24. print('——————进程的结束时间:', date_time_str(datetime.now()))
  25. print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
  26. if __name__ == '__main__':
  27. func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-16 11:07:35 ——————所有线程的统一开始时间: 2019-02-16 11:07:35 +++线程一的开始时间: 2019-02-16 11:07:35 ***线程二的开始时间: 2019-02-16 11:07:35 ***线程二休眠2秒 +++线程一休眠4秒 ***线程二的结束时间: 2019-02-16 11:07:37 +++线程一的结束时间: 2019-02-16 11:07:39 ——————进程的结束时间: 2019-02-16 11:07:39 ——————所有线程的强制结束时间: 2019-02-16 11:07:39 C:\Users\jacky\Desktop> ###### 例子三:(函数+多线程)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. def func1():
  9. print('+++线程一的开始时间:', date_time_str(datetime.now()))
  10. print('+++线程一休眠4秒')
  11. sleep(4)
  12. print('+++线程一的结束时间:', date_time_str(datetime.now()))
  13. def func2():
  14. print('***线程二的开始时间:', date_time_str(datetime.now()))
  15. print('***线程二休眠2秒')
  16. sleep(2)
  17. print('***线程二的结束时间:', date_time_str(datetime.now()))
  18. def func_main():
  19. print('——————进程的开始时间:', date_time_str(datetime.now()))
  20. print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
  21. _thread.start_new_thread(func1,()) #执行线程一
  22. _thread.start_new_thread(func2,()) #执行线程二
  23. sleep(5) #进程休眠5秒后继续执行
  24. print('——————进程的结束时间:', date_time_str(datetime.now()))
  25. print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
  26. if __name__ == '__main__':
  27. func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-16 11:09:37 ——————所有线程的统一开始时间: 2019-02-16 11:09:37 +++线程一的开始时间: 2019-02-16 11:09:37 +++线程一休眠4秒 ***线程二的开始时间: 2019-02-16 11:09:37 ***线程二休眠2秒 ***线程二的结束时间: 2019-02-16 11:09:39 +++线程一的结束时间: 2019-02-16 11:09:41 ——————进程的结束时间: 2019-02-16 11:09:42 ——————所有线程的强制结束时间: 2019-02-16 11:09:42 C:\Users\jacky\Desktop> ###### 例子四:(函数+多线程+线程锁)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. def func1(lock):
  9. print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(8)秒')
  10. sleep(8)
  11. print('线程1的结束时间:', date_time_str(datetime.now()))
  12. lock.release()
  13. def func2(lock):
  14. print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(2)秒')
  15. sleep(2)
  16. print('线程2的结束时间:', date_time_str(datetime.now()))
  17. lock.release()
  18. def func3(lock):
  19. print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(5)秒')
  20. sleep(5)
  21. print('线程3的结束时间:', date_time_str(datetime.now()))
  22. lock.release()
  23. def func_main():
  24. print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  25. fields_1 = range(0, 3) # "3" 意味着有3个线程,依此类推
  26. fields_2 = []
  27. for Key_1 in fields_1:
  28. Key_1 = _thread.allocate_lock()
  29. Key_1.acquire()
  30. fields_2.append(Key_1)
  31. # [0]、[1]、[2]代表线程号,依此类推;分别给每个函数的一个变量进行赋值
  32. _thread.start_new_thread(func1,(fields_2[0],))
  33. _thread.start_new_thread(func2,(fields_2[1],))
  34. _thread.start_new_thread(func3,(fields_2[2],))
  35. for i in fields_1:
  36. while fields_2[i].locked():
  37. pass
  38. print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
  39. if __name__ == '__main__':
  40. func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-16 11:53:58 线程2的开始时间: 2019-02-16 11:53:58 ,休眠(2)秒 线程1的开始时间: 2019-02-16 11:53:58 ,休眠(8)秒 线程3的开始时间: 2019-02-16 11:53:58 ,休眠(5)秒 线程2的结束时间: 2019-02-16 11:54:00 线程3的结束时间: 2019-02-16 11:54:03 线程1的结束时间: 2019-02-16 11:54:06 ——————进程的结束时间: 2019-02-16 11:54:06 C:\Users\jacky\Desktop> ## 备注:所有线程的开始时间都是一样的;使用线程锁时,进程会在所有线程都执行结束后,立即结束。 ###### 例子五:(函数+多线程+线程锁)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. def func1(n_sec, lock):
  9. print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  10. sleep(n_sec)
  11. print('线程1的结束时间:', date_time_str(datetime.now()))
  12. lock.release()
  13. def func2(n_sec, lock):
  14. print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  15. sleep(n_sec)
  16. print('线程2的结束时间:', date_time_str(datetime.now()))
  17. lock.release()
  18. def func3(n_sec, lock):
  19. print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  20. sleep(n_sec)
  21. print('线程3的结束时间:', date_time_str(datetime.now()))
  22. lock.release()
  23. def func4(n_sec, lock):
  24. print('线程4的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  25. sleep(n_sec)
  26. print('线程4的结束时间:', date_time_str(datetime.now()))
  27. lock.release()
  28. def func_main():
  29. print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  30. fields_1 = range(0, 4) # "4" 意味着有4个线程,依此类推
  31. fields_2 = []
  32. for Key_1 in fields_1:
  33. Key_1 = _thread.allocate_lock()
  34. Key_1.acquire()
  35. fields_2.append(Key_1)
  36. # [0]、[1]、[2]、[3]代表线程号,依此类推;分别给每个函数的两个变量进行赋值
  37. _thread.start_new_thread(func1,(8, fields_2[0]))
  38. _thread.start_new_thread(func2,(2, fields_2[1]))
  39. _thread.start_new_thread(func3,(5, fields_2[2]))
  40. _thread.start_new_thread(func4,(10, fields_2[3]))
  41. for i in fields_1:
  42. while fields_2[i].locked():
  43. pass
  44. print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
  45. if __name__ == '__main__':
  46. func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-16 12:02:37 线程1的开始时间: 2019-02-16 12:02:37 ,休眠( 8 )秒 线程2的开始时间: 2019-02-16 12:02:37 ,休眠( 2 )秒 线程3的开始时间: 2019-02-16 12:02:37 ,休眠( 5 )秒 线程4的开始时间: 2019-02-16 12:02:37 ,休眠( 10 )秒 线程2的结束时间: 2019-02-16 12:02:39 线程3的结束时间: 2019-02-16 12:02:42 线程1的结束时间: 2019-02-16 12:02:45 线程4的结束时间: 2019-02-16 12:02:47 ——————进程的结束时间: 2019-02-16 12:02:47 C:\Users\jacky\Desktop> ###### 例子六:(类+多线程)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. class class1():
  9. def func1(self):
  10. print('+++线程一的开始时间:', date_time_str(datetime.now()))
  11. print('+++线程一休眠4秒')
  12. sleep(4)
  13. print('+++线程一的结束时间:', date_time_str(datetime.now()))
  14. def func2(self):
  15. print('***线程二的开始时间:', date_time_str(datetime.now()))
  16. print('***线程二休眠2秒')
  17. sleep(2)
  18. print('***线程二的结束时间:', date_time_str(datetime.now()))
  19. def func_main(self):
  20. print('——————进程的开始时间:', date_time_str(datetime.now()))
  21. print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
  22. _thread.start_new_thread(self.func1,()) #执行线程一
  23. _thread.start_new_thread(self.func2,()) #执行线程二
  24. sleep(5) #进程休眠5秒后继续执行
  25. print('——————进程的结束时间:', date_time_str(datetime.now()))
  26. print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
  27. if __name__ == '__main__':
  28. myclass = class1()
  29. myclass.func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-17 21:31:29 ——————所有线程的统一开始时间: 2019-02-17 21:31:29 +++线程一的开始时间: 2019-02-17 21:31:29 ***线程二的开始时间: 2019-02-17 21:31:29 ***线程二休眠2秒 +++线程一休眠4秒 ***线程二的结束时间: 2019-02-17 21:31:31 +++线程一的结束时间: 2019-02-17 21:31:33 ——————进程的结束时间: 2019-02-17 21:31:34 ——————所有线程的强制结束时间: 2019-02-17 21:31:34 C:\Users\jacky\Desktop> ###### 例子七:(类+多线程+线程锁)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. class class1():
  9. def func1(self,lock):
  10. print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(8)秒')
  11. sleep(8)
  12. print('线程1的结束时间:', date_time_str(datetime.now()))
  13. lock.release()
  14. def func2(self,lock):
  15. print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(2)秒')
  16. sleep(2)
  17. print('线程2的结束时间:', date_time_str(datetime.now()))
  18. lock.release()
  19. def func3(self,lock):
  20. print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(5)秒')
  21. sleep(5)
  22. print('线程3的结束时间:', date_time_str(datetime.now()))
  23. lock.release()
  24. def func_main(self):
  25. print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  26. fields_1 = range(0, 3)
  27. fields_2 = []
  28. for Key_1 in fields_1:
  29. Key_1 = _thread.allocate_lock()
  30. Key_1.acquire()
  31. fields_2.append(Key_1)
  32. _thread.start_new_thread(self.func1,(fields_2[0],)) #给一个变量进行赋值
  33. _thread.start_new_thread(self.func2,(fields_2[1],))
  34. _thread.start_new_thread(self.func3,(fields_2[2],))
  35. for i in fields_1:
  36. while fields_2[i].locked():
  37. pass
  38. print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
  39. if __name__ == '__main__':
  40. myclass = class1()
  41. myclass.func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-17 21:48:59 线程2的开始时间: 2019-02-17 21:48:59 ,休眠(2)秒 线程1的开始时间: 2019-02-17 21:48:59 ,休眠(8)秒 线程3的开始时间: 2019-02-17 21:48:59 ,休眠(5)秒 线程2的结束时间: 2019-02-17 21:49:01 线程3的结束时间: 2019-02-17 21:49:04 线程1的结束时间: 2019-02-17 21:49:07 ——————进程的结束时间: 2019-02-17 21:49:07 C:\Users\jacky\Desktop> ###### 例子八:(类+多线程+线程锁)
  1. #coding=utf-8
  2. import _thread
  3. from time import sleep
  4. from datetime import datetime
  5. date_time_format = '%Y-%m-%d %H:%M:%S'
  6. def date_time_str(date_time):
  7. return datetime.strftime(date_time, date_time_format)
  8. class class1():
  9. def func1(self,n_sec, lock):
  10. print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  11. sleep(n_sec)
  12. print('线程1的结束时间:', date_time_str(datetime.now()))
  13. lock.release()
  14. def func2(self,n_sec, lock):
  15. print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  16. sleep(n_sec)
  17. print('线程2的结束时间:', date_time_str(datetime.now()))
  18. lock.release()
  19. def func3(self,n_sec, lock):
  20. print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  21. sleep(n_sec)
  22. print('线程3的结束时间:', date_time_str(datetime.now()))
  23. lock.release()
  24. def func4(self,n_sec, lock):
  25. print('线程4的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  26. sleep(n_sec)
  27. print('线程4的结束时间:', date_time_str(datetime.now()))
  28. lock.release()
  29. def func_main(self):
  30. print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  31. fields_1 = range(0, 4)
  32. fields_2 = []
  33. for Key_1 in fields_1:
  34. Key_1 = _thread.allocate_lock()
  35. Key_1.acquire()
  36. fields_2.append(Key_1)
  37. _thread.start_new_thread(self.func1,(8,fields_2[0])) #给两个变量进行赋值
  38. _thread.start_new_thread(self.func2,(2,fields_2[1]))
  39. _thread.start_new_thread(self.func3,(5,fields_2[2]))
  40. _thread.start_new_thread(self.func4,(10,fields_2[3]))
  41. for i in fields_1:
  42. while fields_2[i].locked():
  43. pass
  44. print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
  45. if __name__ == '__main__':
  46. myclass = class1()
  47. myclass.func_main()
复制代码
脚本运行的效果: C:\Users\jacky\Desktop>python xx.py ——————进程的开始时间: 2019-02-17 21:58:23 线程3的开始时间: 2019-02-17 21:58:23 ,休眠( 5 )秒 线程2的开始时间: 2019-02-17 21:58:23 ,休眠( 2 )秒 线程4的开始时间: 2019-02-17 21:58:23 ,休眠( 10 )秒 线程1的开始时间: 2019-02-17 21:58:23 ,休眠( 8 )秒 线程2的结束时间: 2019-02-17 21:58:25 线程3的结束时间: 2019-02-17 21:58:28 线程1的结束时间: 2019-02-17 21:58:31 线程4的结束时间: 2019-02-17 21:58:33 ——————进程的结束时间: 2019-02-17 21:58:33 C:\Users\jacky\Desktop> 相关文章: CentOS8使用多线程+Ping




欢迎光临 blog.zhuohua.store (http://blog.zhuohua.store/) Powered by Discuz! 7.2