• python多进程,多线程实例


    多进程和多线程总是傻傻分不清,查阅资料得知主要区别有两点

    • 一个进程可能包含多个线程,也就是线程概念小于进程
    • 多线程共享进程数据,共享简单,但同步复杂,相反,多线程数据是分开,但同步简单

    多进程

    多进程我一遍会使用multiprocessing包

    from multiprocessing import Process
    def fun1(name):
        print('测试%s多进程' %name)
    if __name__ == '__main__':
        process_list = []
        for i in range(5):  #开启5个子进程执行fun1函数
            p = Process(target=fun1,args=('Python',)) #实例化进程对象
            p.start()
            process_list.append(p)
    
        for i in process_list:
            p.join()
    
        print('结束测试')
    
    

    join()方法可以在当前位置阻塞主进程,带执行join()的进程结束后再继续执行主进程的代码逻辑,也就是说,加了join(),主进程会等待在这里直到多进程执行完毕,再执行。 不加join,主程序会继续执行,不会等待多进程结束

    除了直接写进程,还能使用进程池

    from  multiprocessing import Process,Pool
    def fun1(name):
        print('Run task %s (%s)...' % (name, os.getpid()))
        start = time.time()
        time.sleep(random.random() * 3)
        end = time.time()
        print('Task %s runs %0.2f seconds.' % (name, (end - start)))
    if __name__=='__main__':
        pool = Pool(5) #创建一个5个进程的进程池
        for i in range(10):
            pool.apply_async(func=fun1, args=(i,))   #apply是同步,apply_async是异步
        pool.close()
        pool.join()
        print('结束测试')
    

    多线程

    多线程我一般会用threading

    import threading
    def fun1(name):
        print('测试%s多线程' %name)
    if __name__ == '__main__':
        for i in range(10):
            t = threading.Thread(target=fun1, args=(str(i),))
            t.start()
    
  • 相关阅读:
    C#中IPAddress转换成整型int
    没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
    VB.NET或C#报错:You must hava a license to use this ActiveX control.
    c#几种随机数组和数组乱序
    C#封装的websocket协议类
    VB生成条形码(EAN-13)
    VB控件间的拖放
    VB用API模拟截屏键PrintScreen
    VB读写进程的内存
    几个VB常见又内涵的错误
  • 原文地址:https://www.cnblogs.com/peng-yuan/p/15182545.html
Copyright © 2020-2023  润新知