• 进程基础整理


    进程实例:
    import threading

    import time
    def run(n):
    print("task",n)
    time.sleep(2)
    t1 = threading.Thread(target=run,args = ("t1",))
    t2 = threading.Thread(target=run,args = ("t2",))
    t1.start()
    t2.start()

    多线程类实现方法:
    class MyThread(threading.Thread):
    def __init__(self,n):
    super(MyThread,self).__init__()
    self.n = n
    def run(self):
    print("runint task",self.n)
    t1 = MyThread("t1")
    t1.run()
    一个程序有多个线程的话,子线程是并发执行的,怎么才能等等子线程结束结果呢,关健字join()


    import threading
    import time

    
    

    def run(n):
    print("task ",n )
    time.sleep(2)
    print("task done",n)

    
    

    start_time = time.time()
    t_objs = [] #存线程实例
    for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" %i ,))
    t.start()
    t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

    
    

    # for t in t_objs: #循环线程实例列表,等待所有线程执行完毕
    # t.join()

    
    


    print("----------all threads has finished...")
    print("cost:",time.time() - start_time)
    # run("t1")
    # run("t2")

    如何做到主线程结束,子线程就结束呢,要用到守护线程  关健字  .setDaemon(True)


    import threading
    import time

    def run(n):
    print("task ",n )
    time.sleep(2)
    print("task done",n,threading.current_thread())

    start_time = time.time()
    t_objs = [] #存线程实例
    for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" %i ,))
    t.setDaemon(True) #把当前线程设置为守护线程
    t.start()
    t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

    # for t in t_objs: #循环线程实例列表,等待所有线程执行完毕
    # t.join()

    time.sleep(2)
    print("----------all threads has finished...",threading.current_thread(),threading.active_count())
    print("cost:",time.time() - start_time)
    # run("t1")
    # run("t2")

    全局解析器锁

    无论你的主机有多少个核,python的线程其实只有一个线程,一切都是假象 上下文切换。它是调用c写的原生内核接口,加锁方法,,,,python3.0以上会自动加锁,新版忽略

     

    _author__ = "Alex Li"

     

    import threading
    import time

     

    def run(n):
    lock.acquire()
    global num
    num +=1
    time.sleep(1)
    lock.release()

     


    lock = threading.Lock()
    num = 0
    t_objs = [] #线程实例
    for i in range(50):
    t = threading.Thread(target=run,args=("t-%s" %i ,))
    t.start()
    t_objs.append(t) #为了不阻塞后面线程的启动,不在这里join,先放到一个列表里

     

    for t in t_objs: #循环线程实例列表,等待所有线程执行完毕
    t.join()

     

    print("----------all threads has finished...",threading.current_thread(),threading.active_count())

     

    print("num:",num)

    线程无法发挥计算机性能,,只适用io操作,大密集CPU操作时用进程  下面一人简单的例子创造进程

    from multiprocessing import Process

    import time

     

    def f(name):

     

        time.sleep(2)

     

        print('hello', name)

     

     

     

    if __name__ == '__main__':

     

        = Process(target=f, args=('bob',))

     

        p.start()

     

        p.join()
     
    也可以写成:
    
    

    import multiprocessing

    import time

    def run(name):

    time.sleep(1)

    print('hello',name)

    if __name__ == "__main__":

    for i in range(10):

    print("e")

    p = multiprocessing.Process(target =run, args = ('xs',))

    p.start()

    p.join()

     

     

    import multiprocessing
    import time
    def f(name):
    time.sleep(1)
    print('hello',name)
    if __name__ == "__main__":
    for i in range(10):
    print("e")
    p = multiprocessing.Process(target =f, args = ('xs',))
    p.start()
    p.join()
    如何在进程中加入线程例子:

    import multiprocessing
    import time,threading
    def thr():
    print('输出当前线程',threading.get_ident())
    def run(name):
    time.sleep(1)
    print('hello',name)
    #没有参数直接忽略,逗号结束
    t = threading.Thread(target=thr,)
    t.start()
    if __name__ == "__main__":
    for i in range(10):

    p = multiprocessing.Process(target =run, args = ('xs',))
    p.start()
    p.join()
    #每一个进程都是父进程启动的,,,
    from multiprocessing import Process
    import os
    def info(title):
    print(title)
    print('module name',__name__)
    print('父进程id',os.getppid())
    print('自己的进程id',os.getpid())
    def f(name):
    info('33[31;1m dfdfdfdfdfdfd 33[0m')
    print("hello",name)
    if __name__=='__main__':
    info('33[31;1m dfdfdfdfdfdfd 33[0m')
    p = Process(target = f,args = ('bob',))
    p.start()
    p.join()
      
    #每一个进程都是父进程启动的,,,
    # 本程序的第一个父ID是pychrm 子进程是自己写的那个主函数,,而主函数调用手,子进程 变成了子进程的父进程 id
    from multiprocessing import Process
    import os
    def info(title):
    print(title)
    print('module name',__name__)


    print('父进程id',os.getppid())
    print('自己的进程id',os.getpid())
    def f(name):
    info('33[31;1m funcif 33[0m')
    print("hello",name)
    if __name__=='__main__':
    info('33[31;1m pychrmfun 33[0m')
    p = Process(target = f,args = ('bob',))
    p.start()
    p.join()

    
    
     

     

     

     

     

     



     
  • 相关阅读:
    CF1066D Boxes Packing
    luogu P2508 [HAOI2008]圆上的整点
    luogu P2502 [HAOI2006]旅行
    luogu P2511 [HAOI2008]木棍分割
    luogu P4161 [SCOI2009]游戏
    luogu P4160 [SCOI2009]生日快乐
    windows2012系统IE浏览器无法打开加载flashplayer内容
    kvm虚拟机相关
    esxI开启虚拟化
    Termux 详细安装
  • 原文地址:https://www.cnblogs.com/fgxwan/p/9639785.html
Copyright © 2020-2023  润新知