Python多进程多线程库快速使用demo

Python多进程多线程库快速使用demo

使用的Python==3.7.x
使用到了两个库,分别是threading和multiprocessing
使用顺序单调乏味

"""
1.导入进程包
2.使用进程创建对象
3.使用进程对象启动进程指定任务
"""

举个栗子,定义两个函数,载歌载舞。

import time
import os
def sing(num,name):
    for i in range(num):
        print("sing_pid",os.getpid())
        print("sing_pid_father", os.getppid())
        #print(name)
        print(name,"sing")
        time.sleep(0.5)

def dance(t):
    for i in range(t):
        print("dance_pid", os.getpid())
        print("dance")
        time.sleep(0.5)

按照往常的运行办法,会按照顺序,如

sing(**)
dance(**)

会先唱完歌再跳舞,有顺序,但是慢的一。
先以多进程为栗子

import multiprocessing



if __name__ == '__main__':
    print(os.getpid())
    sing_process = multiprocessing.Process(target=sing,args=(3,"pjf"))
    dance_process = multiprocessing.Process(target=dance,kwargs={"t":2})
    #sing_process.daemon = True ## 守护主进程(主进程结束,子进程销毁)


    sing_process.start()
    dance_process.start()
29708
sing_pid 29716
dance_pid 5536
dance
sing_pid_father 29708
pjf sing
dance_pid 5536
dance
sing_pid 29716
sing_pid_father 29708
pjf sing
sing_pid 29716
sing_pid_father 29708
pjf sing

and,其中getpid()读取的是子进程的进程号,getppid()是取得父进程的进程号,可以看出来sing和dance都是同一个父进程里的,并且sing_process.daemon = True 是用来守护主进程(主进程结束,子进程销毁)。

再举个栗子,多进程拷贝小电影

def copy_file(file_name,source_dir,dest_dir):
    source_path = source_dir+"/"+ file_name
    dest_path = dest_dir+"/"+ file_name
    with open(source_path,"rb") as source_file:
        with open(dest_path,"wb") as dest_file:
            while True:
                data = source_file.read(1024)
                if data:
                    dest_file.write(data)
                else:
                    break
                    
for file_name in file_list:
    sub_pro = multiprocessing.Process(target=copy_file,args=(file_name,source_dir,dest_dir))
    sub_pro.start()

多进程结束,下面是关于多线程的

为什么使用多线程?比如QQ可以和多个人聊天,而不需要打开两个QQ和两个人聊天,进程是线程的容器,线程是单元,线程是程序执行的最小单位。但实际调包没啥区别。

import threading
s1 = threading.Thread(target=sing,args=(3,"pjf"),daemon=True)   ### 与多进程语法一致
s1.start()

此外,线程的顺序是无序的,可以用下面的代码进行检验:

def task():
    time.sleep(1)
    thread = threading.current_thread()
    print(thread)

溜了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值