在我的工作中,他们“利用”龙卷风,但他们没有异步库。什么使库异步,以便它更适合龙卷风?有没有很好的例子,或者我猜你在__enter__
或__exit__
做了哪些事情表明你没有阻止?
我发现很难将一些材料划在一起。
答案 0 :(得分:4)
如果您的库不是异步的并且不支持在tornado ioloop中运行,那么您唯一能做的就是在其他线程中运行这些任务。
基本上,有两种选择,具体取决于您是否要接收返回值:
如果your_task_func
是要卸载到另一个线程的同步任务,则基本上执行以下操作:
def callback(future):
# here you want to do some stuff with the value future.result()
EXECUTOR.submit(
your_task_func
).add_done_callback(
lambda future: tornado.ioloop.IOLoop.instance().add_callback(
partial(callback, future)))
有关此内容的更多详情,请参阅this nice write-up。
问候 马库斯
答案 1 :(得分:2)
异步---你的意思是线程?如果要同时运行某些代码,可以使用已standard library中内置的threading
模块(或更低级thread
模块)。例如:
import threading
import time
def counter():
c = 0
while True:
print c
time.sleep(1)
c += 1
counterThread = threading.Thread(target=counter, name="counter")
counterThread.daemon = True # if False (default), Python interpreter won't quit until the thread ends
counterThread.start()
锁定对象是使用__enter__
和__exit__
实现的,因此您可以根据自己的问题使用with
关键字。