python多线程实现

'''
文件夹命名不能用官方已有的模块名比如threading.py test.py等等都会报错!!!
'''


from multiprocessing import Process
import os

# 子进程要执行的代码
def run_proc(name):
    print('Run child process %s (%s)...' % (name, os.getpid()))

#一个进程的创建(内存映射)无非是 算法(参数1:func)+数据(参数2:函数入参)
if __name__=='__main__':#程序入口开始执行就产生了主进程,如果不引入多进程创建子进程,整个程序执行过程只有在执行入口产生的1个父进程
    print('Parent process %s.' % os.getpid())#用来获取主进程的进程ID:266528
    #可以看出父进程是持续到程序结束的
    p = Process(target=run_proc, args=('test',))#实例化进程p,调用run_proc函数,传入参数对象args,开辟了子进程
    print('Child process will start.')#ID:266540,而子进程在程序执行过程中经历了创建和销毁.
    p.start()#进程准备就绪,进程在此行之后就自动开始执行了
    print("-------------")
    p.join()#等待进程p运行结束!!!(进程同步)
    #注释掉p.join(),可能会出现进程p没有运行完毕,然后父进程266528继续运行了.会出现先print出"Child process end",然后子进程才执行出 print  "Run child process %s (%s)..."
    print('Child process end.')
    print('Parent process %s.' % os.getpid())#ID:266528


from multiprocessing import Process
import random,time

def do_task(task):
    print('我正在做{}'.format(task))
    #time.sleep(random.randint(1,3))

def write_task(task):
    print('我正在写{}'.format(task))
    #time.sleep(random.randint(1,3))

if __name__ == "__main__":
    p1 = Process(target=do_task,args=('PPT',))
    p2 = Process(target=write_task,args=('Sql',))
    p1.start()
    p2.start()


import multiprocessing
import random,time,os

def do_task(task):
    print('我正在做{}'.format(task))
    #print(os.getpid())
    time.sleep(random.randint(1,3))

def write_task(task):
    print('我正在写{}'.format(task))
    #print(os.getpid())
    time.sleep(random.randint(1,3))

if __name__ == "__main__":
    func_list=[do_task,write_task]
    args_list=["PPT","Sql"]#如果是单个子进程的创建,函数的传参只接受元组(a,)形式
    pool=multiprocessing.Pool(2)

    for func,arg in func_list,args_list:
            pool.apply_async(func,arg)
    print('Waiting for all subprocesses done...')
    pool.close()
    pool.join()    #调用join之前,一定要先调用close() 函数,否则会出错
    print('All subprocesses done')



import time, random
from threading import Thread
#threading.py--模块
#class func----Thread

def do_chioce(task):
    print('我正在{}'.format(task))
    time.sleep(random.randint(1,3))

if __name__ == "__main__":
    t = Thread(target=do_chioce,args=('选PPT模板',))#Thread类
    t.start()
posted @ 2020-09-30 17:56  Parallax  阅读(144)  评论(0编辑  收藏  举报