Одним из решений является уничтожение уже используемого порта и его повторное использование. Чтобы убить определенный порт в Linux, используйте следующую команду:
sudo fuser -k Port_Number/tcp
Например: В вашем случае это будет выглядеть следующим образом:
sudo fuser -k 98/tcp
Но, чтобы ответить на ваш вопрос, я думаю код ниже поможет вам найти все свободные порт TCP:
from contextlib import closing
import socket
for port in range(1, 8081):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
res = sock.connect_ex(('localhost', port))
if res == 0:
print (port)
Если все, в чем Вы нуждаетесь, должно уведомить одно приложение, которое другой выполнило его задачу, самый легкий путь состоял бы в том, чтобы использовать именованный EventWaitHandle. Объект создается в его несообщенном состоянии. Первое приложение ожидает на дескрипторе, и второе приложение сигнализирует о дескрипторе, когда это закончило делать свое задание. Например:
// First application
EventWaitHandle waitForSignal = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle");
// Here, the first application does whatever initialization it can.
// Then it waits for the handle to be signaled:
// The program will block until somebody signals the handle.
waitForSignal.WaitOne();
Это настраивает первую программу для ожидания синхронизации. Второе приложение одинаково просто:
// Second app
EventWaitHandle doneWithInit = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle");
// Here, the second application initializes what it needs to.
// When it's done, it signals the wait handle:
doneWithInit.Set();
Когда второй Набор вызовов приложения, это будет сигнализировать о событии, и первое приложение продолжится.
Другие популярные опции для IPC включают:
Если Вам только нужна синхронизация, можно рассмотреть a Semaphore
, или Mutex
объект. Существуют классы, которые существуют в System.Threading
пространство имен для.NET, Если Вы создаете названные версии их, затем они относятся к целой машине.