标题:
Python3使用多线程/线程锁
[打印本页]
作者:
admin
时间:
2019-9-28 10:10
标题:
Python3使用多线程/线程锁
例子一:(函数+多线程)
#coding=utf-8
import _thread #导入多线程模块
from time import sleep #导入sleep()函数
from datetime import datetime #导入datetime模块
date_time_format = '%Y-%m-%d %H:%M:%S' #自定义时间的输出格式
def date_time_str(date_time): #自定义转换时间格式的函数
return datetime.strftime(date_time, date_time_format)
def func1():
print('+++线程一的开始时间:', date_time_str(datetime.now()))
print('+++线程一休眠4秒')
sleep(4)
print('+++线程一的结束时间:', date_time_str(datetime.now()))
def func2():
print('***线程二的开始时间:', date_time_str(datetime.now()))
print('***线程二休眠2秒')
sleep(2)
print('***线程二的结束时间:', date_time_str(datetime.now()))
def func_main():
print('——————进程的开始时间:', date_time_str(datetime.now()))
print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
_thread.start_new_thread(func1,()) #执行线程一
_thread.start_new_thread(func2,()) #执行线程二
sleep(3) #进程休眠3秒后继续执行
print('——————进程的结束时间:', date_time_str(datetime.now()))
print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
if __name__ == '__main__':
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> ## 备注:所有线程的开始时间都是一样的;所有线程都会在进程执行结束后,立即强制结束。 ###### 例子二:(函数+多线程)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func1():
print('+++线程一的开始时间:', date_time_str(datetime.now()))
print('+++线程一休眠4秒')
sleep(4)
print('+++线程一的结束时间:', date_time_str(datetime.now()))
def func2():
print('***线程二的开始时间:', date_time_str(datetime.now()))
print('***线程二休眠2秒')
sleep(2)
print('***线程二的结束时间:', date_time_str(datetime.now()))
def func_main():
print('——————进程的开始时间:', date_time_str(datetime.now()))
print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
_thread.start_new_thread(func1,()) #执行线程一
_thread.start_new_thread(func2,()) #执行线程二
sleep(4) #进程休眠4秒后继续执行
print('——————进程的结束时间:', date_time_str(datetime.now()))
print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
if __name__ == '__main__':
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> ###### 例子三:(函数+多线程)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func1():
print('+++线程一的开始时间:', date_time_str(datetime.now()))
print('+++线程一休眠4秒')
sleep(4)
print('+++线程一的结束时间:', date_time_str(datetime.now()))
def func2():
print('***线程二的开始时间:', date_time_str(datetime.now()))
print('***线程二休眠2秒')
sleep(2)
print('***线程二的结束时间:', date_time_str(datetime.now()))
def func_main():
print('——————进程的开始时间:', date_time_str(datetime.now()))
print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
_thread.start_new_thread(func1,()) #执行线程一
_thread.start_new_thread(func2,()) #执行线程二
sleep(5) #进程休眠5秒后继续执行
print('——————进程的结束时间:', date_time_str(datetime.now()))
print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
if __name__ == '__main__':
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> ###### 例子四:(函数+多线程+线程锁)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func1(lock):
print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(8)秒')
sleep(8)
print('线程1的结束时间:', date_time_str(datetime.now()))
lock.release()
def func2(lock):
print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(2)秒')
sleep(2)
print('线程2的结束时间:', date_time_str(datetime.now()))
lock.release()
def func3(lock):
print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(5)秒')
sleep(5)
print('线程3的结束时间:', date_time_str(datetime.now()))
lock.release()
def func_main():
print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
fields_1 = range(0, 3) # "3" 意味着有3个线程,依此类推
fields_2 = []
for Key_1 in fields_1:
Key_1 = _thread.allocate_lock()
Key_1.acquire()
fields_2.append(Key_1)
# [0]、[1]、[2]代表线程号,依此类推;分别给每个函数的一个变量进行赋值
_thread.start_new_thread(func1,(fields_2[0],))
_thread.start_new_thread(func2,(fields_2[1],))
_thread.start_new_thread(func3,(fields_2[2],))
for i in fields_1:
while fields_2[i].locked():
pass
print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
if __name__ == '__main__':
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> ## 备注:所有线程的开始时间都是一样的;使用线程锁时,进程会在所有线程都执行结束后,立即结束。 ###### 例子五:(函数+多线程+线程锁)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
def func1(n_sec, lock):
print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程1的结束时间:', date_time_str(datetime.now()))
lock.release()
def func2(n_sec, lock):
print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程2的结束时间:', date_time_str(datetime.now()))
lock.release()
def func3(n_sec, lock):
print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程3的结束时间:', date_time_str(datetime.now()))
lock.release()
def func4(n_sec, lock):
print('线程4的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程4的结束时间:', date_time_str(datetime.now()))
lock.release()
def func_main():
print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
fields_1 = range(0, 4) # "4" 意味着有4个线程,依此类推
fields_2 = []
for Key_1 in fields_1:
Key_1 = _thread.allocate_lock()
Key_1.acquire()
fields_2.append(Key_1)
# [0]、[1]、[2]、[3]代表线程号,依此类推;分别给每个函数的两个变量进行赋值
_thread.start_new_thread(func1,(8, fields_2[0]))
_thread.start_new_thread(func2,(2, fields_2[1]))
_thread.start_new_thread(func3,(5, fields_2[2]))
_thread.start_new_thread(func4,(10, fields_2[3]))
for i in fields_1:
while fields_2[i].locked():
pass
print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
if __name__ == '__main__':
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> ###### 例子六:(类+多线程)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class1():
def func1(self):
print('+++线程一的开始时间:', date_time_str(datetime.now()))
print('+++线程一休眠4秒')
sleep(4)
print('+++线程一的结束时间:', date_time_str(datetime.now()))
def func2(self):
print('***线程二的开始时间:', date_time_str(datetime.now()))
print('***线程二休眠2秒')
sleep(2)
print('***线程二的结束时间:', date_time_str(datetime.now()))
def func_main(self):
print('——————进程的开始时间:', date_time_str(datetime.now()))
print('——————所有线程的统一开始时间:', date_time_str(datetime.now()))
_thread.start_new_thread(self.func1,()) #执行线程一
_thread.start_new_thread(self.func2,()) #执行线程二
sleep(5) #进程休眠5秒后继续执行
print('——————进程的结束时间:', date_time_str(datetime.now()))
print('——————所有线程的强制结束时间:', date_time_str(datetime.now()))
if __name__ == '__main__':
myclass = class1()
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> ###### 例子七:(类+多线程+线程锁)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class1():
def func1(self,lock):
print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(8)秒')
sleep(8)
print('线程1的结束时间:', date_time_str(datetime.now()))
lock.release()
def func2(self,lock):
print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(2)秒')
sleep(2)
print('线程2的结束时间:', date_time_str(datetime.now()))
lock.release()
def func3(self,lock):
print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(5)秒')
sleep(5)
print('线程3的结束时间:', date_time_str(datetime.now()))
lock.release()
def func_main(self):
print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
fields_1 = range(0, 3)
fields_2 = []
for Key_1 in fields_1:
Key_1 = _thread.allocate_lock()
Key_1.acquire()
fields_2.append(Key_1)
_thread.start_new_thread(self.func1,(fields_2[0],)) #给一个变量进行赋值
_thread.start_new_thread(self.func2,(fields_2[1],))
_thread.start_new_thread(self.func3,(fields_2[2],))
for i in fields_1:
while fields_2[i].locked():
pass
print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
if __name__ == '__main__':
myclass = class1()
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> ###### 例子八:(类+多线程+线程锁)
#coding=utf-8
import _thread
from time import sleep
from datetime import datetime
date_time_format = '%Y-%m-%d %H:%M:%S'
def date_time_str(date_time):
return datetime.strftime(date_time, date_time_format)
class class1():
def func1(self,n_sec, lock):
print('线程1的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程1的结束时间:', date_time_str(datetime.now()))
lock.release()
def func2(self,n_sec, lock):
print('线程2的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程2的结束时间:', date_time_str(datetime.now()))
lock.release()
def func3(self,n_sec, lock):
print('线程3的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程3的结束时间:', date_time_str(datetime.now()))
lock.release()
def func4(self,n_sec, lock):
print('线程4的开始时间:',date_time_str(datetime.now()), ',休眠(', n_sec, ')秒')
sleep(n_sec)
print('线程4的结束时间:', date_time_str(datetime.now()))
lock.release()
def func_main(self):
print(f"——————进程的开始时间: {date_time_str(datetime.now())}")
fields_1 = range(0, 4)
fields_2 = []
for Key_1 in fields_1:
Key_1 = _thread.allocate_lock()
Key_1.acquire()
fields_2.append(Key_1)
_thread.start_new_thread(self.func1,(8,fields_2[0])) #给两个变量进行赋值
_thread.start_new_thread(self.func2,(2,fields_2[1]))
_thread.start_new_thread(self.func3,(5,fields_2[2]))
_thread.start_new_thread(self.func4,(10,fields_2[3]))
for i in fields_1:
while fields_2[i].locked():
pass
print(f"——————进程的结束时间: {date_time_str(datetime.now())}")
if __name__ == '__main__':
myclass = class1()
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