我想知道在Python中是否有任何用于异步方法调用的库.如果你可以做类似的事情会很棒
@async
def longComputation():
<code>
token = longComputation()
token.registerCallback(callback_function)
# alternative, polling
while not token.finished():
doSomethingElse()
if token.finished():
result = token.result()
Run Code Online (Sandbox Code Playgroud)
或者异步调用非异步例程
def longComputation()
<code>
token = asynccall(longComputation())
Run Code Online (Sandbox Code Playgroud)
如果在语言核心中使用更加精细的策略,那就太棒了.这是考虑过吗?
我正在为用户创建一个小仪表板,以便他能够运行特定的工作.我正在使用Django所以我希望他能够单击一个链接来启动作业,然后将页面返回给他,并显示作业正在运行的消息.该工作的结果将在稍后通过电子邮件发送给他.
我相信我应该使用,subprocess.Popen但我不确定.所以在伪代码中,这就是我想要做的:
if job == 1:
run script in background: /path/to/script.py
return 'Job is running'
Run Code Online (Sandbox Code Playgroud) 我的一个视图函数是一个非常长的处理工作,显然需要以不同的方式处理.如果我能够通过电子邮件发送结果的处理作业,而不是等待完成通知用户他们的请求正在被处理并让他们浏览,而不是让用户等待很长时间.我知道我可以使用os.fork,但我想知道Django是否有"正确的方法".也许我可以返回HTTP响应,而不是以某种方式继续这项工作?
我想在使用渲染视图后做一些事情
return render_to_response()
Run Code Online (Sandbox Code Playgroud)
信号是唯一的方法吗?我是否需要编写自定义信号或request_finished给我足够的信息?基本上我需要知道呈现了什么页面,然后做出响应的动作.
谢谢.
来自评论的更新:我不想阻止页面的渲染,所以我想首先渲染页面然后执行操作.
我想从django视图开始处理一些文件,我希望能够在处理时将文件名发送到浏览器.有没有办法(轻松)这样做?我可以使用线程和ajax调用来做到这一点,但我现在想要最简单的解决方案.