Можно ли использовать Asyncio с win32com в Python? - PullRequest
0 голосов
/ 28 мая 2018

Моя программа на Python получает данные через COM-объекты Windows и записывает их в файл hdf5.Чтобы использовать объекты COM, я использовал win32com.client.DispatchWithEvents.Приведенный ниже код показывает упрощенную структуру моей программы.

class Handler_realTime(object):  
    def __init__(self):
        pass

    def OnReceiveRealData(self, eventTime, eventData01, eventData02, eventData03):
        m.target_table.append( np.array([( eventTime, eventData01, eventData02, eventData03 )] )
        m.file.flush()        # <--- being delayed due to IO processing!



class MainClass(object):
    def __init__(self):
        self.file = tb.open_file('hdf5File.h5', 'a')
        self.target_table = self.file.root.realTime

        self.realReceving = win32com.client.DispatchWithEvents("Session.RealTime",Handler_realTime)
        # calls Handler_realTime whenever new data arrives

m = MainClass()

Она отлично работает, но недавно я почувствовал низкую производительность программы из-за частых flush() и чрезмерных вызовов.Затем я подумал, что Asyncio может улучшить производительность, путем случайной очистки файла и одновременной обработки других задач.

Я просмотрел несколько книг по Asyncio на Python, но не смог найти примеров, которые используют классы вместо функций (async def).Другими словами, я не знаю, возможно ли использовать функции (не классы) с DispatchWithEvents или возможно ли принять Asyncio в этой ситуации.

...