- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
为了弄清楚 PeriodicCallback
是如何安排的,我写了这个脚本:
import time
import tornado.ioloop
t0 = time.time()
def foo():
time.sleep(1)
print(time.time() - t0)
tornado.ioloop.PeriodicCallback(foo, 2000).start()
tornado.ioloop.IOLoop.instance().start()
我希望它每 2 秒或每 3 秒触发一次,具体取决于 Tornado 是否等到完成以安排下一个事件。但是,我得到了这个:
3.00190114975
6.00296115875
10.0029530525
14.0029621124
18.0029540062
22.0050959587
26.0040180683
30.005161047
34.0053040981
这是怎么回事?
最佳答案
即使在“后台”PeriodicCallback 中休眠,在 Tornado 应用程序中也绝不是一个好主意,因为它会阻止 IOLoop 并可能阻止它适本地安排事情。如果您使用的是 Tornado,则需要将所有长阻塞调用替换为非阻塞等效项(或将它们移至其他线程)。将 sleep 替换为 IOLoop.add_timeout,将网络操作替换为 IOStream 或其他异步库等。
关于python - 意外的 tornado.ioloop.PeriodicCallback 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24089086/
我觉得这应该不是那么难,但到目前为止我收效甚微。 假设我有一个名为 PikaClass 的类,它包装了 pika并提供了一些业务方法。 def PikaClass(object): def __i
我正在使用tornado.ioloop.IOLoop.run_in_executor将同步函数更改为异步,但事实证明,每次调用该函数时,都会创建一个线程,但不会杀死该线程。 这是一个最小的可重现示例(
我正在使用 Tornado 进行网络聊天,并且混淆了 IOLoop.add_callback 和 IOLoop.add_timeout。 据我所知,IOLoop.add_timeout 有一个特定的时
我是 Tornado 的新手。我构建了这个非常基本的 Tornado 请求处理程序,我预计它会在 GET 上返回“Hello World”: import tornado import tornado
我正在尝试在 Tornado 中运行多个进程,我尝试了在此线程上提出的建议:run multiple tornado processess 但错误并没有消失。这是服务器文件。 server.py im
我正在使用以下代码优雅地关闭我的 Tornado 应用程序(取自 https://gist.github.com/wonderbeyond/d38cd85243befe863cdde54b845057
Python Tornado 的 IOLoop.add_handler(fd,handler,events) 表示“fd 参数可以是整数文件描述符,也可以是具有 fileno() 方法的类文件对象”,
我需要使用 Tornado 实现一个简单的服务。当我的服务启动时,它会创建第二个线程,我需要在这个线程中运行 Tornado 的 ioloop,因为同时主线程正忙于做一些其他工作。在第二个线程中使用
我一直在研究 tornado web 框架,但我仍然没有清楚地理解 ioloop 的功能,尤其是如何在多线程中使用它。是否可以为多个服务器创建单独的 ioloop 实例?? 最佳答案 绝大多数 Tor
你好吗? 最近几天我经历了这个麻烦,我似乎无法完全理解tornado gen库。 我有这段代码,作为示例: @gen.coroutine def get(self, build_id=None):
我正在尝试在多个线程中运行多个 IOLoop,我想知道 IOLoop 实际上是如何工作的。 class WebThread(threading.Thread): def __init__(se
我正在编写一些需要在 IPython 中异步运行后台任务的代码。对于在后台运行任务,我想我可以使用 IPython 使用的相同 Tornado ioloop。有没有办法获取当前 ioloop 实例的句
我想在后台线程中创建一个 PyZMQ 事件循环,并让它与独立的 Python 脚本和 IPython 脚本一起正常工作。 (IPython 使用位于主线程中的 PyZMQ 事件循环,因此这给我带来了问
我可以初始化一个 IOLoop.instance 并 fork 使用 IOLoop.instance() 的新进程吗?就像是: #some code which initializes IOLoop.
我想编写一个单线程程序来托管使用 Tornado 的网络服务器并在 ZMQ 套接字上接收消息(使用 PyZMQ Tornado 事件循环:http://learning-0mq-with-pyzmq.
我有一个脚本需要异步连接到 TCP 服务器并使用 TornadoWeb (3.2) 发送一些数据。 这是简短版本: import tornado.ioloop import tornado.iostr
我需要能够优雅地停止在 Pika ioloop 中工作的消费者(工作人员)。工作人员应在 60 秒后停止。当前处理的消息应该完成。 我试图在回调函数中放置一个 connection.close() 但
我有一个应用程序,其中每个 websocket 连接(在 tornado 打开回调中)都会创建一个 zmq.SUB 套接字到现有 zmq.FORWARDER 设备。想法是从 zmq 接收数据作为回调,
我有一个带有两个处理程序的简单 aiohttp-server。第一个在 async for 循环中进行一些计算。第二个只返回文本响应。 not_so_long_operation 以最慢的递归实现返回
为了弄清楚 PeriodicCallback 是如何安排的,我写了这个脚本: import time import tornado.ioloop t0 = time.time() def foo():
我是一名优秀的程序员,十分优秀!