Обмен данными с несколькими программами Python
Я собираю данные через несколько веб-сайтов. Для этого я написал несколько веб-скребков с использованием селена и PhantomJs.
Эти скребки возвращают значения.
Мой вопрос: есть ли способ, которым я могу передать эти значения одной программе Python, которая будет сортировать эти данные в режиме реального времени.
Я хочу не сохранять эти данные для последующего анализа, я хочу отправить их в программу, которая будет анализировать их в режиме реального времени.
что я пробовал: я понятия не имею, с чего начать
3 ответа
Вы можете попытаться записать данные, которыми вы хотите поделиться, в файл, а другой скрипт прочитает и интерпретирует их. Запустите другой скрипт в цикле, чтобы проверить, существует ли новый файл или файл был изменен.
Возможно, подойдет именованная труба:
mkfifo whatever
(вы также можете сделать это из скрипта Python; os.mkfifo)
Вы можете написать whatever
как обычный файл (он будет блокироваться, пока что-то его не прочитает) и читать из whatever
с другим процессом (он заблокируется, если нет доступных данных)
Пример:
# writer.py
with open('whatever', 'w') as h:
h.write('some data') # Blocks until reader.py reads the data
# reader.py
with open('whatever', 'r') as h:
print(h.read()) # Blocks until writer.py writes to the named pipe
Просто используйте файлы для обмена данными и тривиальный механизм блокировки. Каждый писатель или читатель (кажется, только один читатель) получает уникальный номер. Если писатель или читатель хочет записать в файл, он переименовывает его в исходное имя + номер, а затем записывает или читает, переименовывая его после этого. Другие ждут, пока файл снова не станет доступен под своим именем, а затем получают к нему доступ, блокируя его аналогичным образом.
Конечно, у вас есть общая память и тому подобное, или меммэппированные файлы и семафоры. Но этот механизм работал безупречно для меня более 30 лет, на любой ОС, в любой сети. Так как это тривиально просто.
На самом деле это семафор мьютекса бедняков. Чтобы узнать, изменился ли файл, посмотрите его метку времени записи. Но блокировка тоже необходима, иначе вы попадете в беспорядок.