Если у вас есть проблемы с сокетами, вы можете рассмотреть альтернативные механизмы IPC. Например, именованные каналы позволяют двум процессам взаимодействовать, как если бы они просто записывали / читали в / из файла.
В следующем примере показано, как создается именованный канал и как его открывать для чтения и записи в двух разных процессах:
import os
pipe_name = '/tmp/ipc'
if not os.path.exists(pipe_name):
os.mkfifo(pipe_name)
try:
with open(pipe_name) as f:
print 'Received:', f.read()
with open(pipe_name, 'w') as f:
message = 'Goodbye World!'
print 'Sending:', message
f.write(message)
finally:
os.remove(pipe_name)
else:
with open(pipe_name, 'w') as f:
message = 'Hello World!'
print 'Sending:', message
f.write(message)
with open(pipe_name) as f:
print 'Received:', f.read()
Первый процесс будет:
- Создать именованный канал
- Получить сообщение
- Отправить еще одно сообщение
- Удалить трубу
в то время как второй процесс будет просто:
- Отправить сообщение
- Получить еще одно сообщение
Если вы выполните приведенный выше пример в двух разных терминалах, в первом вы получите:
Received: Hello World!
Sending: Goodbye World!
и во втором:
Sending: Hello World!
Received: Goodbye World!
Примечание: это всего лишь пример. Если вам нужна двунаправленная связь, было бы удобнее использовать два именованных канала вместо открытия только одного для чтения / записи, когда вам нужно получать / отправлять сообщения.