представьте, что у вас есть такая тяжелая функция io:
def getMd5Sum(path):
with open(path) as f:
return md5(f.read()).hexdigest()
Считаете ли вы, что Python достаточно гибок, чтобы разрешить такой код (обратите внимание на $):
def someGuiCallback(filebutton):
...
path = filebutton.getPath()
md5sum = $getMd5Sum()
showNotification("Md5Sum of file: %s" % md5sum)
...
Чтобы выполнить что-то вроде этого:
def someGuiCallback_1(filebutton):
...
path = filebutton.getPath()
Thread(target=someGuiCallback_2, args=(path,)).start()
def someGuiCallback_2(path):
md5sum = getMd5Sum(path)
glib.idle_add(someGuiCallback_3, md5sum)
def someGuiCallback_3(md5sum):
showNotification("Md5Sum of file: %s" % md5sum)
...
(glib.idle_add просто помещает функцию в очередь основного потока)
Я думал об использовании декораторов, но они не позволяют мне получить доступ к «содержимому» функции после вызова. (часть showNotification)
Думаю, я мог бы написать «компилятор» для изменения кода перед выполнением, но это не похоже на оптимальное решение.
У вас есть идеи, как сделать что-то вроде вышеперечисленного?