Python 多线程编程 (一)

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值