返回列表 发帖

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.        
  26.         fields_1 = range(0, 3) # "3" 意味着有3个线程,依此类推
  27.         fields_2 = []
  28.        
  29.         for Key_1 in fields_1:
  30.                 Key_1 = _thread.allocate_lock()
  31.                 Key_1.acquire()
  32.                 fields_2.append(Key_1)
  33.    
  34.                 # [0]、[1]、[2]代表线程号,依此类推;分别给每个函数的一个变量进行赋值
  35.         _thread.start_new_thread(func1,(fields_2[0],))
  36.         _thread.start_new_thread(func2,(fields_2[1],))
  37.         _thread.start_new_thread(func3,(fields_2[2],))
  38.                
  39.         for i in fields_1:
  40.                 while fields_2[i].locked():
  41.                         pass
  42.                        
  43.         print(f"——————进程的结束时间: {date_time_str(datetime.now())}")

  44. if __name__ == '__main__':

  45.         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.        
  24. def func4(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():

  30.         print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  31.        
  32.         fields_1 = range(0, 4) # "4" 意味着有4个线程,依此类推
  33.         fields_2 = []
  34.        
  35.         for Key_1 in fields_1:
  36.                 Key_1 = _thread.allocate_lock()
  37.                 Key_1.acquire()
  38.                 fields_2.append(Key_1)
  39.    
  40.                 # [0]、[1]、[2]、[3]代表线程号,依此类推;分别给每个函数的两个变量进行赋值
  41.         _thread.start_new_thread(func1,(8, fields_2[0]))
  42.         _thread.start_new_thread(func2,(2, fields_2[1]))
  43.         _thread.start_new_thread(func3,(5, fields_2[2]))
  44.         _thread.start_new_thread(func4,(10, fields_2[3]))
  45.                
  46.         for i in fields_1:
  47.                 while fields_2[i].locked():
  48.                         pass
  49.                        
  50.         print(f"——————进程的结束时间: {date_time_str(datetime.now())}")

  51. if __name__ == '__main__':

  52.         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.        
  27.                 fields_1 = range(0, 3)
  28.                 fields_2 = []
  29.        
  30.                 for Key_1 in fields_1:
  31.                         Key_1 = _thread.allocate_lock()
  32.                         Key_1.acquire()
  33.                         fields_2.append(Key_1)
  34.    
  35.                 _thread.start_new_thread(self.func1,(fields_2[0],)) #给一个变量进行赋值
  36.                 _thread.start_new_thread(self.func2,(fields_2[1],))
  37.                 _thread.start_new_thread(self.func3,(fields_2[2],))
  38.                
  39.                 for i in fields_1:
  40.                         while fields_2[i].locked():
  41.                                 pass
  42.                        
  43.                 print(f"——————进程的结束时间: {date_time_str(datetime.now())}")

  44. if __name__ == '__main__':

  45.         myclass = class1()
  46.         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.                
  25.         def func4(self,n_sec, lock):
  26.                 print('线程4的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
  27.                 sleep(n_sec)
  28.                 print('线程4的结束时间:', date_time_str(datetime.now()))
  29.                 lock.release()

  30.         def func_main(self):

  31.                 print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
  32.        
  33.                 fields_1 = range(0, 4)
  34.                 fields_2 = []
  35.        
  36.                 for Key_1 in fields_1:
  37.                         Key_1 = _thread.allocate_lock()
  38.                         Key_1.acquire()
  39.                         fields_2.append(Key_1)
  40.    
  41.                 _thread.start_new_thread(self.func1,(8,fields_2[0])) #给两个变量进行赋值
  42.                 _thread.start_new_thread(self.func2,(2,fields_2[1]))
  43.                 _thread.start_new_thread(self.func3,(5,fields_2[2]))
  44.                 _thread.start_new_thread(self.func4,(10,fields_2[3]))
  45.                
  46.                 for i in fields_1:
  47.                         while fields_2[i].locked():
  48.                                 pass
  49.                        
  50.                 print(f"——————进程的结束时间: {date_time_str(datetime.now())}")

  51. if __name__ == '__main__':

  52.         myclass = class1()
  53.         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

返回列表