问题标签 [reactor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
994 浏览

c++ - ACE Reactor 因系统调用中断而退出

我有一个 ACE 反应器,它接受套接字连接并侦听这些连接上的传入数据。反应器在专用线程中运行。这是线程的入口函数:

偶尔run_reactor_event_loop以 -1 退出并errno报告原因是“系统调用中断”。我该如何处理这种情况?据我所知,我有两个选择:run_reactor_event_loop再次调用或将中断的调用配置为使用sigactionand再次调用SA_RESTART

  1. 再打电话安全run_reactor_event_loop吗?
  2. ACE_Reactor::restart 方法有什么作用?看起来它应该重新启动循环?会有帮助吗?
  3. 开机有多安全SA_RESTART?例如,这是否意味着 ^C 不会停止我的应用程序?
  4. 有没有其他方法可以处理这种情况?
0 投票
1 回答
1321 浏览

python - 连接不成功后重新启动 Twisted-python Reactor

我正在编写具有多个客户端的服务器。当客户端启动时,服务器可能还没有工作。所以 areactor.connectTCP可能会失败(没有接收端)。目前我正在通过循环 a 来解决这个问题reactor.run,即:

  1. 连接到服务器
  2. 反应堆运行
  3. 如果失败,重复

我知道这不是扭曲的方法。那我该怎么办?

0 投票
1 回答
719 浏览

python - 扭曲反应堆:优先级和见解

关于扭曲电抗器的两个简单问题:

  1. 有没有办法在调度任务时明确分配优先级?

  2. 是否可以检查反应堆以列出所有待处理的任务?

0 投票
1 回答
206 浏览

tkinter - 如何在扭曲的供电服务器中弹出 tkMessageBox

我有一个基于twisted reactor的服务器,我需要如下场景:服务器可以接收两种类型的请求

  • ADD(x,y) 并返回一个总和
  • HUMAN_PERMISSION 仅当人类用户批准客户端的 ip 时才返回 true

我正在使用 tkMessageBox 询问人类用户,但问题是它阻塞了整个反应器并且服务器对其他请求没有响应

我知道我必须以某种方式在这里使用twisted's deferred,只是不知道这是怎么回事:似乎不起作用,它仍然阻塞了整个反应堆

0 投票
2 回答
3134 浏览

python - 扭曲反应堆在一个程序中多次启动?

是否可以在同一个程序中多次启动反应器?假设您想出于 API 目的将扭曲的功能封装在方法中。

例如,mymodule.py 看起来像这样:

main.py 看起来像这样:

0 投票
4 回答
2636 浏览

multithreading - Twisted:同时使用多个线程和进程

Twisted 文档让我相信,在同一个应用程序中结合 和 等技术是可以reactor.spawnProcess()threads.deferToThread(),reactor 可以在幕后优雅地处理这个问题。在实际尝试后,我发现我的应用程序死锁了。自己使用多个线程,或者自己使用子进程,一切都很好。

查看反应器源代码,我发现该SelectReactor.spawnProcess()方法只是简单地调用os.fork(),而不考虑可能正在运行的多个线程。这解释了死锁,因为从对您的调用开始,os.fork()将有两个进程运行多个并发线程,并且谁知道使用相同的文件描述符做什么。

我的问题是,解决这个问题的最佳策略是什么?

我想到的是 subclass SelectReactor,所以它是一个单例并且os.fork()只调用一次,在实例化时立即调用。子进程将在后台运行并充当父进程的服务器(使用管道上的对象序列化来来回通信)。父进程继续运行应用程序并且可以根据需要使用线程。在父进程中的调用spawnProcess()将委托给子进程,这将保证只有一个线程在运行,因此可以os.fork()安全地调用。

有没有人这样做过?有更快的方法吗?

0 投票
2 回答
593 浏览

python - 如何解决扭曲中对多个反应器的需求

我正在使用 qt4reactor 在 Linux 上运行 Qt 应用程序该应用程序在串行端口上发送和接收字节。这在带有 QtReactor 的 Linux 上运行良好

但是,当我将应用程序移植到 Windows 时,我遇到了问题。在 Windows 上,我使用来自 _win32SerialPort 的 SerialPort 类。_win32SerialPort 中的文档字符串非常清楚:

我假设需要使用 win32eventreactor 是因为 addReader、addWriter 方法是为 windows 编写的。

当使用 QtReactor 时,只要在传输上调用 lostConnection,就会调用 twisted.internet.abstract 中的 lostConnection,最终调用 qt4reactor addWriter 方法(以刷新输出)。

然后这会创建一个 qt4reactor.TwistedSocketNotifier,它会尝试为 select() 获取文件描述符编号。abstract.fileno 方法不会被_win32SerialPort 覆盖,所以总是返回-1,我得到一个

我已经看过很多关于不允许在扭曲中使用多个反应器的帖子,但是我认为我在这里假设我需要用于 Qt 应用程序的 QtReactor 和用于 Windows 串行端口的 win32eventreactor 是正确的。

或者我可以使用其他一些解决方法吗?

注意 1:在 Windows 上使用 QtReactor 时,串行端口工作正常,即它们可以发送和接收数据。只有当我关闭应用程序时,我才会得到“指定的无效套接字”

注意2:现在我找到了一种解决方法。我使用 QtReactor,但是在关闭我的应用程序时我会这样做

其中 serial 是 _win32serialport.SerialPort 的一个实例

这种方式 abstract.loseConnection 永远不会被调用,这意味着永远不会调用 QtReactor addWriter 来刷新输出。我怀疑最好的解决方案涉及调用 lostConnection 并正确刷新输出。

0 投票
2 回答
436 浏览

protocols - 在协议子类中使用 twisted.internet.reactor

我是 twisted 的新手,我正在尝试了解一般异步编程的设计模式,特别是 twisted。从设计的角度来看,从协议子类访问反应器是一个好主意,如下所示:

0 投票
2 回答
18010 浏览

twisted - 在某个条件下停止扭曲反应器

有没有办法在达到特定条件时停止扭曲反应器。例如,如果一个变量被设置为某个值,那么反应器应该停止吗?

0 投票
3 回答
6683 浏览

python - 扭曲的未处理错误

当扭曲反应器正在运行并且在未捕获的延迟中发生异常时,“未处理的错误”将与回溯和异常一起打印到终端。是否可以处理/拦截这些异常(例如,设置回调或覆盖方法)?

编辑:我知道我可以通过将 errback 添加到 deferrerd 来捕获失败。我想知道的是,是否有办法拦截一个未处理的故障/异常,该故障/异常已经沿着链向上到达反应堆。

编辑:本质上,我想知道扭曲反应器是否有全局错误处理程序或可以访问的东西。我想知道,因为它会打印故障的回溯和错误。

例子: