2014-01-25 51 views
0

我有一個使用Flask的網絡服務器設置,它的工作原理。另外,我有一個演示TCP服務器,它也可以工作。我希望他們在同一個過程中運行,以便他們能夠交流;然而,我遇到了困難,因爲他們既想打開一個端口,而我得到的錯誤:同時運行網絡服務器和TCP服務器

socket.error: [Errno 98] Address already in use 

我的理解是,一個進程無法打開多個端口,但糾正我,如果我錯誤。是否有可能運行每個都有自己的端口的子進程?還是有一種簡單的方法在Python中的進程之間進行通信?

什麼是獲得網絡服務器和TCP服務器來傳遞信息的最佳方式,比如更新一個在另一箇中反映的信息?

謝謝!

+0

您是否在調試模式下在開發Web服務器上運行Flask應用程序?如果你用'debug = False'運行它,有什麼不同? – Miguel

回答

0

對於flask web服務器和TCP服務器使用不同的端口號。

+0

我是:燒瓶5000,燒杯12321。 – Jacob

+0

您可能會在調試時意外運行兩次相同的進程,請運行此命令ps -fA | grep蟒蛇並殺死額外的進程 – chk

+0

沒有。沒有出現,重新啓動也沒有解決問題。 – Jacob

0

進程可以使用多個端口,但通常不需要使用相同端口的多個進程。

在這種情況下,你可能只需要一對SO_REUSEADDR年代,一個在每個過程: http://docs.python.org/3/library/socket.html

通常情況下,*九內核將拒絕允許從端口獲取數據,即使是處理後那是使用它退出 - 一段時間。這被視爲一個安全問題,因爲否則其他進程可能會在此後監聽端口,並獲取用於第一個進程的數據。 SO_REUSEADDR告訴內核「不要那樣做」。