Python的多线程(六)

Python的多线程

1、多任务的概念

1.1 单任务

一个一个完成任务

1.2 多任务

同一时间内执行多个任务

1.3 并发和并行

1.3.1 并行

一起执行

1.3.2 并发

任务的交替进行

2、进程、线程与协程

2.1 进程

进程:是系统进行资源分配的基本单位。

进程:动态的概念,运行起来的程序,包括程序,以及运行程序所需要的计算机资源等。

程序:静态的概念,我们写的.py或.go等,都是程序。

2.1.1 进程状态
2.1.2 多进程的概念
import multiprocessing
import time
import os

def read1(*args, **kwargs):
    print(*args)
    for i in range(1000):
        print("子进程在打印信息,姓名",args[0],"age",args[1])
        print(kwargs)
        print(os.getpid())
        print(os.getppid())

if __name__ == "__main__":
    print("主进程",os.getpid())
    p = multiprocessing.Process(target=read1, name= "son", args= ("laowang", 18),kwargs= {"gender":"girl"})
    p.start()

    time.sleep(1)

    p.join()
    print("主进程结束啦")
    exit()
注意点:
1、os.getpid获取执行当前任务的进程编号
2、os.getppid获取的是当前进程的父进程编号
3、多进程之间不共享全局变量,多个进程之间是独立的
2.1.3 传参
def read1(*args, **kwargs):
    print(*args)
    for i in range(1000):
        print("子进程在打印信息,姓名",args[0],"age",args[1])
        print(kwargs)
        print(os.getpid())
        print(os.getppid())

if __name__ == "__main__":
    print("主进程",os.getpid())
    p = multiprocessing.Process(target=read1, name= "son", args= ("laowang", 18),kwargs= {"gender":"girl"})
    p.start()
2.1.4 队列
try:
    for i in range(3):
        que.put("123",True,1)
except Exception as e:
    print("消息队列已经满了","当前数据有%s个"%que.qsize())
注意点:
1、put在默认的情况下,如果队列已经满了,一直阻塞,等待队列出现空余位置
2、如果设置了timeot,那么等待过后,就会报错
3、block设置为false,不等待直接报错


if not que.full():
    for i in range(que.qsize()):
        que.put_nowait("123")
2.1.5 进程池
po = multiprocessing.Pool()
    print(type(po))
    # pid = os.fork()
    # for  i in range(0, 10):
    po.apply(work)
    po.apply(work2)
    po.apply(func=read1, args= ("laowang",),kwds= {"gender":"girl"})
    print('-------------kaishi---------------------')

    po.close()
    po.join()

2.2 线程

2.2.1 定义

默认情况下,程序启动只有一个线程,这个线程就是主线程,线程是CPU调度的基本单位

线程之间共享全局变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值