我正在运行python的apscheduler
,并定期想对一些http资源进行开机自检,这将涉及使用 Tornado 的AsyncHttpClient
作为计划作业。每个作业将执行多个POST。当每个http请求响应时,便会调用回调(我认为Tornado使用future
来完成此操作)。
我在这里担心线程安全,因为Apscheduler
在各种线程中运行作业。我无法找到一个很好解释的示例,说明在这种情况下如何最好在多个线程之间使用 Tornado 。
如何以这种方式最好地将apscheduler
和tornado
一起使用?
具体问题:
AsyncHTTPClient
“像魔术一样工作”。好吧,魔术吓到我了。我需要在当前线程中使用AsyncHTTPClient
还是可以使用主要线程(可以指定)? 最佳答案
tornado.ioloop.IOLoop.instance()
,那么我想如果您的意图是不向主线程的IOLoop添加回调。您可以使用tornado.ioloop.IOLoop.current()
为正确的线程正确引用正确的IOLoop实例。而且您将不得不做大量的记账工作,以从另一个非主线程的IOLoop向一个非主线程的IOLoop添加一个回调-这太困惑了。 apscheduler
,因此我建议您使用IOLoop的add_timeout,它可以完成您所需的几乎所有操作,并且它是Tornado的 native ,可以更好地使用它。无论如何,回调都是很难调试的。将其与Python的线程结合使用,可能会造成很大的困惑。如果您准备考虑其他选择,只需将所有异步处理移出该流程即可,这将使工作变得更加轻松。想想像 celery 这样的东西。 关于python - 如何在APScheduler中使用Tornado?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16389125/