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

問題就解決了,還有在使用進程池的時候切記一定要加這一句否則子進程會遞歸的添加進程到進程池形成死循環.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM