我正在运行python的apscheduler
,并定期希望执行一些POST操作以访问一些HTTP资源。这将涉及使用tornado的AsyncHttpClient
作为计划任务。每个作业将执行多个POST请求。当每个http请求响应时,会调用一个回调函数(我认为Tornado使用future
来实现这一点)。
在这里,我担心线程安全问题,因为Apscheduler
在各种线程中运行作业。我无法找到有关如何在此上下文中跨多个线程最好使用tornado的充分解释。
在这种情况下,我该如何最好地使用apscheduler
与tornado
?
具体的问题:
应该使用哪个tornado ioloop?文档说
AsyncHTTPClient
"像魔术一样工作"。嗯,魔术让我感到害怕。我需要从当前线程中使用AsyncHTTPClient
吗,还是可以使用主线程的(可以指定)?我的回调函数是否存在与我使用的ioloop相关的线程安全问题?
当一个线程完成但仍有待处理的回调/future需要被调用时,不清楚会发生什么。这里存在问题吗?
由于apscheduler作为进程中的线程运行,并且Python有GIL,那么使用主线程的一个IOLoop几乎与使用来自不同线程的多个循环相同(就性能而言)吗?