1、使用多线程规划编程任务:
UserRequestThread:负责读取客户端输入,该输入可能来自 I/O 通道,程序将创建多个线程,每个客户端一个,客户端的请求将会被放入队列中
RequestProcessor:该线程负责从队列中获取请求并进行处理,为第3个线程提供输出
ReplyThread:负责向用户输出,将结果传回给用户,或者把数据写到本地文件系统或数据库中
2、编程模块的选择:
Pyhton 提供了多个模块来支持多线程编程,包括 thread 、threading 和 Queue 模块
程序可以使用 thread 和 threading 模块来创建和管理线程,而threading 模块提供了更高级、功能更全面的线程管理。推荐使用 therading模块
不使用 thread 模块的原因:
1、thread 拥有的同步原语很少,
2、对进程何时退出没有控制
3、不支持守护线程
3、threading模块
Thread 类
4、使用 Thread 类
有以下三种方法创建线程:
1、创建 Thread 的实例,传给它一个函数
2、创建 Therad 的实例,传给它一个可调用的类实例
3、派生 Thread 的字类, 并创建字类的实例
1、创建 Thread 的实例,传给它一个函数
#coding = utf-8
'''
多线程
'''
import threading
from time import ctime, sleep
loop_para = [4, 2]
def loop(i, sleep_second):
print('loop start execute ' + str(i) + ctime())
sleep(sleep_second)
print('loop end execute ' + str(i) + ctime())
def main():
print('start loop', ctime())
loops = []
length = range(len(loop_para))
for i in range(len(loop_para)):
t = threading.Thread( target = loop, args = (i, loop_para[i]))
loops.append(t)
for i in range(len(loop_para)):
loops[i].start()
for i in range(len(loop_para)):
loops[i].join()
print('all done ', ctime())
if __name__ == '__main__':
main()
2、创建 Therad 的实例,传给它一个可调用的类实例
#coding = utf-8
'''
多线程
'''
import threading
from time import ctime, sleep
loop_para = [4, 2]
class Loop_class():
''''''
def __init__(self, func, args, name = ''):
self.name = name
self.func = func
self.args = args
def __call__(self):
self.func(*self.args)
def loop(i, sleep_second):
print('loop start execute ' + str(i) + ctime())
sleep(sleep_second)
print('loop end execute ' + str(i) + ctime())
def main():
print('start loop', ctime())
loops = []
length = range(len(loop_para))
for i in length:
t = threading.Thread( target = Loop_class(loop, (i, loop_para[i]), loop.__name__) )
loops.append(t)
for i in length:
loops[i].start()
for i in length:
loops[i].join()
print('all done ', ctime())
if __name__ == '__main__':
main()
3、派生 Thread 的字类, 并创建字类的实例
#coding = utf-8
'''
多线程
'''
import threading
from time import ctime, sleep
loop_para = [4, 2]
class Loop_class(threading.Thread):
''''''
def __init__(self, func, args, name = ''):
threading.Thread.__init__(self)
self.name = name
self.func = func
self.args = args
def run(self):
self.func(*self.args)
def loop(i, sleep_second):
print('loop start execute ' + str(i) + ctime())
sleep(sleep_second)
print('loop end execute ' + str(i) + ctime())
def main():
print('start loop', ctime())
loops = []
length = range(len(loop_para))
for i in length:
t = Loop_class(loop, (i, loop_para[i]), loop.__name__)
loops.append(t)
for i in length:
loops[i].start()
for i in length:
loops[i].join()
print('all done ', ctime())
if __name__ == '__main__':
main()