《 什 捌python工程的变化处理(一)

进程

  • (一)什么是进程
  1. 当程序运行起来他就是一个进程。通俗的理解就是不运行的时候是程序,运行起来就是进程。程序和进程的对应关系是:程序只有一个,但是进程可以有多个。

  2.  

  • (二)创建多进程

  1.  

     from multiprocessing import Process
    # import  time
    # def sing():
    #     for i in range(10):
    #         print("我在唱第{}句歌词".format(i+1))
    #         time.sleep(1)
    # def dance():
    #     for i in range(10):
    #         print("我在跳第{}段舞蹈".format(i+1))
    #         time.sleep(1)
    # if __name__ ==' __main__':
    #     t1=Process(target=sing)
    #     t2=Process(target=dance)
    #     t1.start()
    #     t2.start()
    # sing()
    # dance()
    
  • (三)进程的状态

  1.  

    from multiprocessing import Process#$
    import os
    
    
    def sing(num):
        print('参数是', num, '进程的ID', os.getpid(), '父进程', os.getppid())
    
    
    def dance(num):
        print('参数是', num, '进程的ID', os.getpid(), '父进程', os.getppid())
    
    
    if __name__ == '__main__':
        print('主进程ID', os.getpid())
        p1 = Process(target=sing, args=(9,))
        p2 = Process(target=dance, args=(99,))
        p1.start()
        p2.start()
  2.  
  3. from multiprocessing import Queue#$
    #
    # q=Queue(3)
    # q.put(10)
    # q.put(20)
    # q.put(30)
    # try:
    #     q.put(40,block=False)# 堵塞了就报错
    # except:
    #     print("队满了,回键")
    # print("到这了")
  •  

  • (四)进程之间通讯

  1.  

 

  • (五)进程池

  1. # from multiprocessing import Pool#
    # import time
    # def downLoad(movie):
    #     for i in range(5):
    #         print(movie, '下载进度%.2f%%' % ((i + 1) / 5 * 100))
    #         time.sleep(1)
    #     return movie
    # def alert(name):
    #     print(name,"下载完毕,请收看")
    # if __name__ == '__main__':
    #     movies=['喜剧','闹剧','肥皂剧','联欢剧','连续剧']
    #     p=Pool(3)
    #     for movie in movies:
    #         p.apply_async(downLoad,args=(movie,),callback=alert)
    #     p.close()
    #     p.join()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

线程

  • (一)线程概念

  1. 由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程即线程,进程是资源分配的最小单位,线程是 CPU 调度的最小单位(程序真正执行的时候调用的是线程).每一个进程中至少有一个线程
  • (二)进程和线程之间的关系

  1.      
    对比参考
       
  • (三)使用 threading 模块创建线程
  1. 0
# from threading import Thread#¥
# import time
# import os
# def sing():
#     for i in range(10):
#         print("唱歌%d"%(i+1),os.getpid())
#         time.sleep(1)
# def dance():
#     for i in range(10):
#         print("跳舞%d"%(i+1),os.getpid())
#         time.sleep(1)
# if __name__ == '__main__':
#     t1=Thread(target=sing)
#     t2=Thread(target=dance)
#     t1.start()
#     t2.start()​​​​​​​

​​​​​​​

  1. ​​​​​​​1、传递参数
# from threading import Thread
# import time
#
# def sing():
#     for i in range(10):
#         print("唱歌%d"%(i+1))
#         time.sleep(0.5)
# def dance():
#     for i in range(10):
#         print("跳舞%d"%(i+1))
#         time.sleep(1)
#
# if __name__ == '__main__':
#     t1 = Thread(target=sing)
#     t2 = Thread(target=dance)
#     t1.start()
#     t2.start()
#
#     t1.join()
#     t2.join()
#
#     print("结束")
  1. 2join()方法
# from threading import Thread
# import time
#
# def sing():
#     for i in range(10):
#         print("唱歌%d"%(i+1))
#         time.sleep(0.5)
# def dance():
#     for i in range(10):
#         print("跳舞%d"%(i+1))
#         time.sleep(1)
#
# if __name__ == '__main__':
#     t1 = Thread(target=sing)
#     t2 = Thread(target=dance)
#     t1.start()
#     t2.start()
#
#     t1.join()
#     t2.join()
#
#     print("结束")
  1. 3setDaemon() 方法
# from threading import Thread
# import time
# def get(num):
#     for i in range(num):
#         print(i)
#         time.sleep(1)
# if __name__ == '__main__':
#     t1=Thread(target=get,args=(5,))
#     t1.setDaemon(True)#守护线程
#     t1.start()
#     print("主线程结束了")
  1. 4实例方法

 

  1. 5threading 模块提供的方法

 

  •  

 

 

 

 

  • 在python中实现多任务有三种方式,进程,线程,协程
  • 进程子类化
  1.  from multiprocessing import Process#$
    # import os,time
    # class SubProcess(Process):#进程子类化
    #     def __init__(self,x):
    #         super().__init__()
    #         self.x=x
    #     def run(self):
    #         for i in range(self.x):
    #             print("启动进程",i,os.getpid())
    #             time.sleep(1)
    # if __name__ == '__main__':
    #
    #     p=SubProcess(3)
    #     p.start()
    #     p1=SubProcess(3)
    #     p1.start()

 

  • (四)使用继承方式开启线程

  1. ​​​​​​​定义一个类继承 threading.Thread 类。

  2. 复写父类的 run()方法
  • (五)线程之间共享全局变量

  • (六)共享全局变量的问题

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值