Моя программа на 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 в этой ситуации.