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()




  • 相关阅读:
    Python笔记17(Django之路由系统)
    Python笔记16(Django介绍与安装)
    Python笔记16(Web框架本质)
    序列的区间操作
    并查集(入门)
    (补题 Uva 3027)Corporative Network
    (补题 cf 1167C)News Distribution
    (补题 CF 1013B 模拟)And
    (补题 CF 1234C)Pipes
    (补题 POJ 1679 次小生成树)The Unique MST
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/10293513.html
Copyright © 2011-2022 走看看