gpt4 book ai didi

python - 简单的 Python 异步。预编译器?

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:01 25 4
gpt4 key购买 nike

假设您有一个像这样的 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 部分)

我想我可以写一个“编译器”来在执行前更改代码,但它不像最佳解决方案那样接缝。

对于如何执行上述操作,您有什么想法吗?

最佳答案

您可以使用导入 Hook 来实现这个目标...

...但我个人认为它有点令人讨厌。

如果你想走那条路,基本上你会做的是:

  • 您为扩展添加导入 Hook (例如“.thpy”)
  • 该导入 Hook 负责(实质上)传递一些有效代码作为导入的结果。
  • 为该有效代码提供了与您正在导入的文件有效相关的参数。
  • 这意味着您的预编译器可以在源代码进入的过程中执行您喜欢的任何转换。

缺点:

  • 虽然以这种方式使用 import hooks 是可行的,但它会让任何维护者或您的代码都大吃一惊。 (坏主意 IMO)
  • 您执行此操作的方式取决于 imputil - 已在 python 3.0 中删除,这意味着您以这种方式编写的代码的生命周期有限。

个人 我不会去那里,但如果你去了,就会有一个问题 Python Magazine做这种事情的地方有一些详细的介绍,我建议你找一期过刊来阅读它。 (由 Paul McGuire 撰写,2009 年 4 月号,可能提供 PDF 格式)。

特别是使用 imputil和 pyparsing 作为示例,但原理是相同的。

关于python - 简单的 Python 异步。预编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1696152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com