Django信号 - 等待信号功能

时间:2012-06-27 16:12:30

标签: django asynchronous signals messaging django-signals

我正在使用django,我想从一个函数发送信号,并在该信号的另一个函数的中间创建一个“等待点”。

更详细, 我正在使用第三方API。所以,

def foo():
   id = thirdPartyFunction(action='/bar')
   id.save()
   # send signal!
   return render_to_response('pleaseWait.html')

def bar():
   # initialize this and that
   # ...
   # WAIT FOR SIGNAL
   return HttpResponseRedirect('success.html')

如何在函数中创建一个侦听器。 目前,我的理解是信号调度程序调用另一个函数。我不知道该怎么做。

感谢您的时间和帮助:)

1 个答案:

答案 0 :(得分:0)

如果两个函数将在同一进程中被调用,则有可能,但是Django由于某种原因并没有使其变得简单。那是因为有更好的方法来执行此操作,例如使用真正的异步工作程序。

如果您确实需要这样做(我经常使用它来测试信号),则可以利用Django运行信号的方式(尽管在将来的版本中可能会发生变化。Django信号都在一个大循环中运行)在相同的过程中,它们被触发,随后的订阅者在较早的订阅者之后被调用。因此,您可以在<asp:TemplateField> <ItemTemplate> <asp:HyperLink runat="server" ID="myHyperLink"></asp:HyperLink> </ItemTemplate> </asp:TemplateField> protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if(e.Row.RowType == DataControlRowType.DataRow) { HyperLink myHyperLink = e.Row.FindControl("myHyperLink") as HyperLink; myHyperLink.Text = e.Row.Cells[1].Text; myHyperLink.NavigateURL = e.Row.Cells[1].Text; } } 中进行如下操作:

bar()

如果需要,您甚至可以从回调中的信号中检索数据并将其保存到状态dict,但不要告诉任何人您从我这里听到过。

相关问题