zoukankan      html  css  js  c++  java
  • 多进程

    from multiprocessing import Process
    def func():
    print(123456)



    if __name__ == '__main__':
    p = Process(target=func,args=())
    p.start()

    ====================================================================
    import time
    from multiprocessing import Process
    def func(arg1,arg2):
    print('*'*arg1)
    time.sleep(2)
    print('*'*arg2)



    if __name__ == '__main__':
    p = Process(target=func,args=(10,20))
    p.start()
    print('======:执行完了')

    结果

    ======:执行完了
    **********
    ********************




    join()方法,感知一个子进程的结束,在执行join下边的代码,将异步的程序,变为同步


    import time
    from multiprocessing import Process
    def func(arg1,arg2):
    print('*'*arg1)
    time.sleep(2)
    print('*'*arg2)



    if __name__ == '__main__':
    p = Process(target=func,args=(10,20))
    p.start()
    p.join()
    print('======:执行完了')

    结果

    **********
    ********************
    ======:执行完了


    但是这样的join()会有问题,因为如果加入了循环会出现错误,因为在多个进程的异步开启只后,进程的执行不是顺序的,而join是根据最后一个进程的结束后执行的,但是其他的进程并不一定也结束了
    import time
    from multiprocessing import Process
    def func(arg1,arg2):
    print('*'*arg1)
    # time.sleep(2)
    print('='*arg2)



    if __name__ == '__main__':
    p_lst = []
    for i in range(10):
    p = Process(target=func,args=(10,20))
    p_lst.append(p)
    p.start()
    p.join()
    print('======:执行完了')

    为了解决这个问题需要使用的放发:
    import time
    from multiprocessing import Process
    def func(arg1,arg2):
    print('*'*arg1)
    # time.sleep(2)
    print('='*arg2)



    if __name__ == '__main__':
    p_lst = []
    for i in range(10):
    p = Process(target=func,args=(10,20))
    p_lst.append(p)
    p.start()
    [p.join() for p in p_lst]
    print('======:执行完了')

    这样就相当于一个拦截器,所有的都结束了,在执行下边的代码

    多进程的另一种编写方式
    class My_Process(Process):
    def __init__(self,name):
    super().__init__()
    self.name = name
    def run(self):
    print('========')
    if __name__ == '__main__':
    p1 = My_Process('p1')
    p1.start()
    p2 = My_Process('p2')
    p2.start()
    多并发socket编程
    import socket
    from multiprocessing import Process
    def my_socket(conn):
    conn.send('你好'.encode('utf-8'))
    ret = conn.recv(1024).decode('utf-8')
    print(ret)
    conn.close()


    if __name__ == '__main__':
    sk = socket.socket()
    sk.bind(('127.0.0.1', 8989))
    sk.listen()
    try:
    while True:
    conn, addr = sk.accept()
    p = Process(target=my_socket,args=(conn,))
    p.start()
    print(p.name)
    finally:
    sk.close()




  • 相关阅读:
    基于Spring的集群会话共享方案-spring session
    Tensorflow 模型线上部署
    Dijkstra算法
    BFS和DFS
    图的基本概念
    排序5
    排序4
    排序3
    排序2
    排序1
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/10293513.html
Copyright © 2011-2022 走看看