问题标签 [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.
c++ - ACE Reactor 因系统调用中断而退出
我有一个 ACE 反应器,它接受套接字连接并侦听这些连接上的传入数据。反应器在专用线程中运行。这是线程的入口函数:
偶尔run_reactor_event_loop
以 -1 退出并errno
报告原因是“系统调用中断”。我该如何处理这种情况?据我所知,我有两个选择:run_reactor_event_loop
再次调用或将中断的调用配置为使用sigaction
and再次调用SA_RESTART
。
- 再打电话安全
run_reactor_event_loop
吗? - ACE_Reactor::restart 方法有什么作用?看起来它应该重新启动循环?会有帮助吗?
- 开机有多安全
SA_RESTART
?例如,这是否意味着 ^C 不会停止我的应用程序? - 有没有其他方法可以处理这种情况?
python - 连接不成功后重新启动 Twisted-python Reactor
我正在编写具有多个客户端的服务器。当客户端启动时,服务器可能还没有工作。所以 areactor.connectTCP
可能会失败(没有接收端)。目前我正在通过循环 a 来解决这个问题reactor.run
,即:
- 连接到服务器
- 反应堆运行
- 如果失败,重复
我知道这不是扭曲的方法。那我该怎么办?
python - 扭曲反应堆:优先级和见解
关于扭曲电抗器的两个简单问题:
有没有办法在调度任务时明确分配优先级?
是否可以检查反应堆以列出所有待处理的任务?
tkinter - 如何在扭曲的供电服务器中弹出 tkMessageBox
我有一个基于twisted reactor的服务器,我需要如下场景:服务器可以接收两种类型的请求
- ADD(x,y) 并返回一个总和
- HUMAN_PERMISSION 仅当人类用户批准客户端的 ip 时才返回 true
我正在使用 tkMessageBox 询问人类用户,但问题是它阻塞了整个反应器并且服务器对其他请求没有响应
我知道我必须以某种方式在这里使用twisted's deferred,只是不知道这是怎么回事:似乎不起作用,它仍然阻塞了整个反应堆
python - 扭曲反应堆在一个程序中多次启动?
是否可以在同一个程序中多次启动反应器?假设您想出于 API 目的将扭曲的功能封装在方法中。
例如,mymodule.py 看起来像这样:
main.py 看起来像这样:
multithreading - Twisted:同时使用多个线程和进程
Twisted 文档让我相信,在同一个应用程序中结合 和 等技术是可以reactor.spawnProcess()
的threads.deferToThread()
,reactor 可以在幕后优雅地处理这个问题。在实际尝试后,我发现我的应用程序死锁了。自己使用多个线程,或者自己使用子进程,一切都很好。
查看反应器源代码,我发现该SelectReactor.spawnProcess()
方法只是简单地调用os.fork()
,而不考虑可能正在运行的多个线程。这解释了死锁,因为从对您的调用开始,os.fork()
将有两个进程运行多个并发线程,并且谁知道使用相同的文件描述符做什么。
我的问题是,解决这个问题的最佳策略是什么?
我想到的是 subclass SelectReactor
,所以它是一个单例并且os.fork()
只调用一次,在实例化时立即调用。子进程将在后台运行并充当父进程的服务器(使用管道上的对象序列化来来回通信)。父进程继续运行应用程序并且可以根据需要使用线程。在父进程中的调用spawnProcess()
将委托给子进程,这将保证只有一个线程在运行,因此可以os.fork()
安全地调用。
有没有人这样做过?有更快的方法吗?
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 并正确刷新输出。
protocols - 在协议子类中使用 twisted.internet.reactor
我是 twisted 的新手,我正在尝试了解一般异步编程的设计模式,特别是 twisted。从设计的角度来看,从协议子类访问反应器是一个好主意,如下所示:
twisted - 在某个条件下停止扭曲反应器
有没有办法在达到特定条件时停止扭曲反应器。例如,如果一个变量被设置为某个值,那么反应器应该停止吗?
python - 扭曲的未处理错误
当扭曲反应器正在运行并且在未捕获的延迟中发生异常时,“未处理的错误”将与回溯和异常一起打印到终端。是否可以处理/拦截这些异常(例如,设置回调或覆盖方法)?
编辑:我知道我可以通过将 errback 添加到 deferrerd 来捕获失败。我想知道的是,是否有办法拦截一个未处理的故障/异常,该故障/异常已经沿着链向上到达反应堆。
编辑:本质上,我想知道扭曲反应器是否有全局错误处理程序或可以访问的东西。我想知道,因为它会打印故障的回溯和错误。
例子: