用python做服务器,怎么实现异步的延迟调用函数

用python做服务器,如何实现异步的延迟调用函数
学习python没多久,之前也没有太多编程的经验。我就具体描述一下我面临的具体问题和希望实现的效果,请大家给点建议。如果觉得我的问题描述的不清楚,也请回帖指出,谢谢。

我用django框架来做服务器完成一些逻辑,现在有这样一个问题需要解决:
我自己的服务器为A,需要与另外一个第三方的服务器B互相发送一些HTTP的请求,完成一些逻辑。流程如下:
1、首先是服务器B向我的服务器A发起了一个请求X,
2、然后我的服务器A对这个请求X进行处理,
3、我的服务器A处理完成后,给第三方服务器B发送一个HTTP处理的返回数据。另外需要在延迟10秒钟后,主动向服务器B再发起一个请求Y。向服务器B确认一下刚才的请求X的处理结果是否已经收到了。

我的问题就在于加粗部分的功能不会做了。

因为我的服务器A会收到很多的请求,有来自服务器B的请求,还有很多其他客户端的请求。按照我的理解,每次收到一个请求,服务器就需要启动一个线程来对这个请求进行处理,当前的请求处理完成后,线程就可以接下来处理其他的请求。如果我这里延迟10秒钟再发起请求,那么这个线程就会一直阻塞,无法处理别的请求。影响服务器的性能。

我想要的解决办法是当收到请求X后,执行完处理逻辑,给服务器B发送返回的数据后,这个线程就结束了。可以继续处理别的请求了。而10秒钟延迟后主动发起请求的功能,不要一直阻塞这个线程的执行。

我大概的想法是,写一个新的类,这个类有一个方法DELAYCALL,可以启动一个计时器,然后计时器计时10秒钟后,触发一个事件,在这个事件的处理函数中主动给服务器B发送请求Y。

这样我在写处理服务器B的请求X的代码时,最后执行一下这个类的DELAYCALL方法,然后就给服务器B返回请求的数据。这样这个线程就结束了。而延迟10秒后,会通过触发事件来完成主动发送请求的功能。

我不知道我自己这么想对不对,能不能达到想要的效果。如果不行,请大家帮忙指点一下该如何来解决这个问题。
------解决思路----------------------
引用:
我想再问一下,如果用这样的方法,等于就是新创建了一个线程,然后来执行delaycall,而原来的线程就继续向下执行程序了对吧?

引用:
这个新创建的线程在什么时候会结束呢?是不是delaycall函数执行完,这个线程就结束了?

对. 自己写点代码测试一下就知道了.

另外, 为什么不在B给A的第一个http请求的回复中放上需要返回的数据呢? B如果没有收到回复, 应该再发送请求, 否则, 就是收到结果了. (没有坏消息就是好消息)

或者A向B发http请求发送结果时时, B也会给A一个回复, 为什么还需要10秒钟后再确认呢?

(不了解你的应用细节, 以上建议只供参考)
------解决思路----------------------
看 一下 celery
------解决思路----------------------
简单的做法是用Thread去调度,由于实际部署django应该是配合uwsgi多进程工作,你可以不用关心线程什么时候消亡,只有线程代码不是死循环,不会影响后面的web请求的。

高富帅的做法就是使用celery,可以参考http://www.tuicool.com/articles/jaaumy,基本原理是后台有一个celery进程,django只是通知celery去delaycall一个指令。