多任务-总结

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.目前用到的关闭的地方有

文件的关闭

套接字的关闭

进程池的关闭

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.进程 1.1多线程的引入 现实生活中 有很多的场景中的事情是同时进行的,比如开车的时候手和脚共同来驾驶汽车,再...
    TENG书阅读 3,619评论 0 0
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 8,925评论 0 5
  • @(python)[笔记] 目录 一、什么是进程 1.1 进程的概念 进程的概念起源于操作系统,是操作系统最核心的...
    CaiGuangyin阅读 4,996评论 0 9
  • 雨淅淅沥沥地下着,雨声串成哀愁的曲调,冰冷的音符在空旷的夜里回响,似小镇在幽咽。他浑浊的眼球里透着如夜一般浓稠的黑...
    冉染1999阅读 1,267评论 0 5
  • 昨天晚上循环了单曲《亡命之徒》到很久,倒不是在等谁给自己发一条生日快乐的微信,而是不经意间想起了多年前的一件往事。...
    狂人包阅读 3,593评论 2 3