Что лучший способ состоит в том, чтобы передать данные от Python до другого приложения в окнах?

Проблема устранена. Пожалуйста, обратите внимание на шаги.

Шаги:

Для вышеперечисленного нам необходимо внести изменения в файл /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$

8
задан monkut 13 November 2008 в 09:25
поделиться

4 ответа

Оставаясь в механизмах межпроцессорного взаимодействия 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
9
ответ дан 5 December 2019 в 13:02
поделиться

XML/JSON и a или веб-сервис или непосредственно через сокет. Это - также язык и независимый от платформы поэтому, если Вы решаете, что хотите разместить часть Python на UNIX, Вы можете, или если Вы хотите внезапно использовать Java или PHP или в значительной степени какой-либо другой язык, Вы можете.

Как правило собственные протоколы/архитектура как COM предлагают больше ограничений, чем они делают преимущества. Поэтому открытые спецификации появились во-первых.

HTH

2
ответ дан 5 December 2019 в 13:02
поделиться

Это не должно быть слишком сложно, чтобы настроить тест для каждой из Ваших альтернатив и сделать сравнительный тест. Замечание ударов контекстно-зависимые эмпирические данные... :)

О, и если бы Вы делаете это, я уверен, что много людей интересовалось бы результатами.

0
ответ дан 5 December 2019 в 13:02
поделиться

+1 на именованных каналах, но я также хотел бы добавить, что из Ваших комментариев кажется, что Ваше приложение очень болтливо. Каждый раз Вы выполняете удаленный вызов, неважно, как быстро базовая передача - Вы, имеют фиксированные затраты маршалинга данных и устанавливания связи. Можно сохранить огромную сумму издержек при изменении addpoint (lat, долго) метод к addpoints (point_array) метод. Идея подобна тому, почему у нас есть пулы соединения с базой данных и http-активные соединения. Менее фактические вызовы Вы делаете лучше. Ваше существующее решение COM может даже быть достаточно хорошим, если можно просто ограничить количество вызовов, Вы передаете его.

2
ответ дан 5 December 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: