Need to register global hotkeys. For example, f4
and f8
. With keyboard library while first callback didn't return, the next won't call.
Another words, logs like this
pressed f4
end for f4
pressed f8
end for f8
But I want to like this
pressed f4
pressed f8
end for f4
end for f8
Demo code
# pip install keyboard
from keyboard import add_hotkey, wait
from time import sleep
def on_callback(key):
print('pressed', key)
sleep(5) # emulate long run task
print('end for', key)
add_hotkey("f4", lambda: on_callback("f4"))
add_hotkey("f8", lambda: on_callback("f8"))
wait('esc')
I tried to use asyncio
, but nothing changed
pressed f4
end for f4
pressed f8
end for f8
from keyboard import add_hotkey, wait
import asyncio
async def on_callback(key):
print('pressed', key)
await asyncio.sleep(5) # emulate long run task
print('end for', key)
add_hotkey("f4", lambda: asyncio.run(on_callback("f4")))
add_hotkey("f8", lambda: asyncio.run(on_callback("f8")))
wait('esc')
Update
Keyboard library's developer gave advise to use call_later
function that create new thread for each callback
and it's works like I want.
But is there way to do such task in the same thread (use asyncio
)? I didn't succeed.
# example with 'call_later' function
from keyboard import add_hotkey, wait, call_later
from time import sleep
def on_callback(key):
print('pressed', key)
sleep(5) # emulate long run task
print('end for', key)
add_hotkey("f4", lambda: call_later(on_callback, args=("f4",)))
add_hotkey("f8", lambda: call_later(on_callback, args=("f8",)))
wait('esc')
from How to async handle callback from keyboard hotkeys?
No comments:
Post a Comment