繁体   English   中英

如何在python中使库异步

[英]How to make a library asynchronous in python

在我的工作中,他们“利用”龙卷风,但没有异步库。 是什么使图书馆成为异步的,从而使其更适合龙卷风之类的东西? 有没有很好的例子,或者我猜您在__enter____exit__事情可以表明您没有阻止?

我发现很难刮擦一些材料。

如果您的库不是异步的,并且不支持在龙卷风ioloop中运行,那么您唯一可以做的就是在其他线程中运行这些任务。

本质上,有两种选择,具体取决于您是否要接收返回值:

  1. 您将工作放在队列中,并且一些线程从队列中拉出工作并关闭这些任务==>没有返回值
  2. 或者您使用执行程序库(python 3.2)并将工作发送到执行程序中 ,添加一个回调以表明任务已完成,并将控制权交还给龙卷风的ioloop(通过挂在循环中的另一个回调)。

如果your_task_func是同步任务,则您希望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)))

关于这个的更多细节可以在这篇不错的文章中找到。

问候马库斯

异步---您的意思是线程化吗? 如果要同时运行一些代码,可以使用标准库中已内置的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关键字。

另请参见第三方线程库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM