Python多进程在Windows操作系统下的坑

笔者是一个python初学者,因为Windows有图形化界面写代码方便,基本代码都是在Windows下写的,这就导致了出现很多问题,比如使用创建多进程来实现服务器并发会出现一些很难想象到的错误,如:

OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
错误代码如下:

import socket
import multiprocessing


def send(new):
    data = new.recv(1024)
    print(data.decode("gbk"))


def main():
    tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    #tcp.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    tcp.bind(("", 7890))
    tcp.listen(128)
    print("- - - -- - ")
    while True:
        new, address = tcp.accept()
        print("连接成功")
        p = multiprocessing.Process(target=send, args=(new, ))
        p.start()
        new.close()
    tcp.close()

main()

原因, 在Windows中因为子进程会复制主进程中所有代码导致相同的端口在子进程中同样被绑定,解决办法是程序最后做一个判断


if __name__ == '__main__':
    main()

问题就解决了,还有在使用进程池的时候切记一定要加这一句否则子进程会递归的添加进程到进程池形成死循环.

阅读更多

没有更多推荐了,返回首页