Pour accéder à un périphérique USB HID connecté sur mon ordinateur, j'utilise la fonction find_all_hid_devices()
du package pywinusb
.hid.find_all_hid_devices() dans la coroutine asynchrone
Maintenant, je voudrais accéder à ce périphérique HID à partir d'une coroutine asynchrone. Avec le code suivant
@asyncio.coroutine
def main():
from pywinusb import hid
a = hid.find_all_hid_devices()
L'erreur suivante est renvoyée:
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\pywinusb\hid\core.py", line 122, in find_all_hid_devices
for interface_data in winapi.enum_device_interfaces(h_info, guid):
File "C:\Python34\lib\site-packages\pywinusb\hid\winapi.py", line 466, in enum_device_interfaces
byref(dev_interface_data)):
ctypes.ArgumentError: argument 1: <class 'OverflowError'>: int too long to convert
Le même appel à hid.find_all_hid_devices()
fonctionne cependant lui-même, dans une plaine principale sans asyncio. Est-ce dû au fait que j'essaie d'accéder au sein d'une coroutine? Quelle est la bonne façon d'y parvenir?
Génial, merci pour votre réponse! Une fois que je reçois mon périphérique HID, le code que je dois exécuter est également (malheureusement) synchrone (par exemple 'device.dosomething1',' device.dosomething2'). Suggéreriez-vous, bien que découragé, que j'emballe toutes ces instructions dans un pool de threads aussi? – Namux
Pour être propre: passer des appels de synchronisation dans le pool de threads est totalement correct, le pool est destiné à cet usage. Pousser l'appel de synchronisation dans l'exécuteur le convertit en appel asynchrone à partir de la perspective asynchrone. Alors oui, s'il vous plaît restez sur ce chemin. –