Проблема устранена. Пожалуйста, обратите внимание на шаги.
Шаги:
Для вышеперечисленного нам необходимо внести изменения в файл /u01/app/oracle/product/12.1.0/dbhome_1/network/lib/ins_net_server.mk [113 ]
Откройте /u01/app/oracle/product/12.1.0/dbhome_1/network/lib/ins_net_server.mk и найдите Linking $ (TNSLSNR).
Заменить на $ (TNSLSNR) -lnnz12 -lons
И продолжить Установка исправлена.
oracle @ imslinux: /u01/app/oracle/product/12.1.0/dbhome_1/dbs$ lsnrctl status
LSNRCTL для Linux: версия 12.1.0.2.0 - производство 18-января-2019 04:52:50
Copyright (c) 1991, 2014, Oracle. Все права защищены.
Подключение к (ОПИСАНИЕ = (АДРЕС = (ПРОТОКОЛ = TCP) (HOST = imslinux) (PORT = 1521)))
Alias LISTENER Версия TNSLSNR для Linux : Версия 12.1.0.2.0 - Дата начала производства 18-ЯНВ-2019 04:52:45 Время безотказной работы 0 дней 0 часов. 0 мин 5 секунд Уровень трассировки выключен Защита включена: локальная проверка подлинности ОС SNMP OFF Файл параметров прослушивателя /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora Файл журнала прослушивателя / u01 / app / oracle / diag / tnslsnr / imslinux / listener / alert / log.xml Сводка конечных точек прослушивания ... (ОПИСАНИЕ = (ADDRESS = (PROTOCOL = tcp) (HOST = imslinux) (PORT = 1521))) (DESCRIPTION = (ADDRESS = (PROTOCOL = ipc) ) (KEY = EXTPROC1521))) Слушатель не поддерживает сервисы. Команда успешно выполнена oracle @ imslinux: /u01/app/oracle/product/12.1.0/dbhome_1/dbs$
Оставаясь в механизмах межпроцессорного взаимодействия Windows, у нас были именованные каналы окон использования положительного опыта. Используя Windows перекрытый IO и win32pipe
модуль от pywin32.
Можно узнать много о win32 и Python в Программировании Python На книге Win32.
Передающая часть просто пишет в r'\\.\pipe\mypipe'
.
Слушатель (ovpipe
) объект содержит дескриптор события, и ожидающий сообщения с возможными другими событиями включает вызов win32event.WaitForMultipleObjects
.
rc = win32event.WaitForMultipleObjects(
eventlist, # Objects to wait for.
0, # Wait for one object
timeout) # timeout in milli-seconds.
Вот часть перекрытого класса слушателя Python:
import win32event
import pywintypes
import win32file
import win32pipe
class ovpipe:
"Overlapped I/O named pipe class"
def __init__(self):
self.over=pywintypes.OVERLAPPED()
evt=win32event.CreateEvent(None,1,0,None)
self.over.hEvent=evt
self.pname='mypipe'
self.hpipe = win32pipe.CreateNamedPipe(
r'\\.\pipe\mypipe', # pipe name
win32pipe.PIPE_ACCESS_DUPLEX| # read/write access
win32file.FILE_FLAG_OVERLAPPED,
win32pipe.PIPE_TYPE_MESSAGE| # message-type pipe
win32pipe.PIPE_WAIT, # blocking mode
1, # number of instances
512, # output buffer size
512, # input buffer size
2000, # client time-out
None) # no security attributes
self.buffer = win32file.AllocateReadBuffer(512)
self.state='noconnected'
self.chstate()
def execmsg(self):
"Translate the received message"
pass
def chstate(self):
"Change the state of the pipe depending on current state"
if self.state=='noconnected':
win32pipe.ConnectNamedPipe(self.hpipe,self.over)
self.state='connectwait'
return -6
elif self.state=='connectwait':
j,self.strbuf=win32file.ReadFile(self.hpipe,self.buffer,self.over)
self.state='readwait'
return -6
elif self.state=='readwait':
size=win32file.GetOverlappedResult(self.hpipe,self.over,1)
self.msg=self.strbuf[:size]
ret=self.execmsg()
self.state = 'noconnected'
win32pipe.DisconnectNamedPipe(self.hpipe)
return ret
XML/JSON и a или веб-сервис или непосредственно через сокет. Это - также язык и независимый от платформы поэтому, если Вы решаете, что хотите разместить часть Python на UNIX, Вы можете, или если Вы хотите внезапно использовать Java или PHP или в значительной степени какой-либо другой язык, Вы можете.
Как правило собственные протоколы/архитектура как COM предлагают больше ограничений, чем они делают преимущества. Поэтому открытые спецификации появились во-первых.
HTH
Это не должно быть слишком сложно, чтобы настроить тест для каждой из Ваших альтернатив и сделать сравнительный тест. Замечание ударов контекстно-зависимые эмпирические данные... :)
О, и если бы Вы делаете это, я уверен, что много людей интересовалось бы результатами.
+1 на именованных каналах, но я также хотел бы добавить, что из Ваших комментариев кажется, что Ваше приложение очень болтливо. Каждый раз Вы выполняете удаленный вызов, неважно, как быстро базовая передача - Вы, имеют фиксированные затраты маршалинга данных и устанавливания связи. Можно сохранить огромную сумму издержек при изменении addpoint (lat, долго) метод к addpoints (point_array) метод. Идея подобна тому, почему у нас есть пулы соединения с базой данных и http-активные соединения. Менее фактические вызовы Вы делаете лучше. Ваше существующее решение COM может даже быть достаточно хорошим, если можно просто ограничить количество вызовов, Вы передаете его.