Вы можете использовать Windows API в соответствии с pywin32 или взломать его с помощью сокета.
Решение для сокетов быстрое и грязное:
# waiting process
import socket
import select
import time
server = socket.socket()
server.bind(('localhost', 1337))
server.listen(5)
# this select() call returns ([server], [], [])
# if server is readable, else ([], [], []), and waits 0 seconds
while not select.select([server], [], [], 0)[0]:
print('working')
time.sleep(0.5)
# parent process
import socket
socket.create_connection(('localhost', 1337))
Решение для Windows длиннее, но более точно представляет проблему:
# waiting process
import time
import win32event
# open an existing event by name with the required access
# (didn't work for me with EVENT_MODIFY_STATE, got "Access denied" error)
event = win32event.OpenEvent(win32event.EVENT_ALL_ACCESS, 0, "MY_NAME")
# Wait 0 seconds on the event. If event has been set, WAIT_OBJECT_0 is returned
while win32event.WaitForSingleObject(event, 0) != win32event.WAIT_OBJECT_0:
print('working')
time.sleep(0.5)
# parent process
# note that it should be run first
import win32event
import time
# create event by name
event = win32event.CreateEvent(
None, # not inherited by child processes
False, # auto-reset the event after it is set
False, # created unset
"MY_NAME", # event name
)
time.sleep(5) # wait for waiting process to start
win32event.SetEvent(event)
Это только минимальный POC.Рекомендуется прочитать о объектах событий , чтобы найти точное решение, которое вам подходит.