1.线程
from threading import Thread
t = Thread(target=work1, args=(x,), kwargs={'x':'y'})
t.start()
2.多线程之间共享数据-全局变量,传参
传参只能使用可变类型的
3.自定义线程类
定义一个类,继承Thread
class func(Thread):
创建run方法
def run(self):
pass
f = func()
f.start() 调用start方法会自动执行run方法
进程
1.导入进程模块
from multiprocessing import Process
# 创建进程对象
p = Process(target=work, args=(x,), kwargs={'x':'y'})
# 开启start
p.start()
2. 进程之间不能共享数据,要想让进程间通信,可以使用消息队列Queue
Queue是进程模块中的一个类
创建队列对象
q = Queue(3) 3表示最大最大能接收三条消息
放入数据
q.put() 括号里面可以放任意类型的数据
q.get() 数据一个一个取出来,当没有数据的时候会等待数据放入,并不会报错
q.empty() 判断队列里面数据是否为空
q.full() 判断队列里面数据是否已经放满
q.qsize() 显示当前队列里面的消息数量
q.put_nowait()
q.get_nowait() 当没有数据要取的时候,会报错,提示empty
3. 进程池:进程可以动态创建,但是当需要的进程数量较多时,手动创建会很浪费时间,这时候,可以使用进程池,
预先创建多个进程,此时进程池里面的进程结束后也不会被销毁
1.导入进程模块中的Pool类
from multiprocessing import Pool
2.创建进程池对象
po = Pool(3) 3表示能接收的最大进程数
3.使用非阻塞的方式调用函数,执行顺序是无序的,异步 同步是指使用阻塞的方式执行,会排队等待
po.apply_async(函数名, (x,y,), {'x':'y'}) 异步,非阻塞,无序
4.po.close() 关闭进程池
po.terminate() 不管任务有没有执行完成,都会立即终止
5.po.join() 主进程等待子进程结束,必须放在close或是terminate之后
4. 进程池消息队列
导入进程模块中的Manager()
from multiprocessing import Pool, Manager
q = Manager().Queue()
其它用法与进程中消息队列用法一样
5.目前用到的关闭的地方有
文件的关闭
套接字的关闭
进程池的关闭
网友评论