问题标签 [interprocess]
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.
python - 多个 python 脚本将消息发送到单个中央脚本
我有许多用 Python 2.6 编写的脚本,可以任意运行。我想要一个中央脚本来收集输出并将其显示在单个日志中。
理想情况下,它将满足以下要求:
- 每个脚本都将其消息发送到同一个“接收器”进行显示。
- 如果在第一个脚本尝试发送消息时接收器未运行,则启动它。
- 接收器也可以手动启动和结束。(虽然如果结束,如果另一个脚本尝试发送消息,它将重新启动。)
- 脚本可以按任何顺序运行,甚至可以同时运行。
- 在Windows上运行。多平台更好,但至少它需要在 Windows 上工作。
我遇到了一些提示:
os.pipe()
multiprocess
- 占用一个港口
mutex
logging.handlers.SocketHandler
(感谢@Dan Head)
从这些碎片中,我想我可以拼凑出一些东西。只是想知道是否有明显“正确”的方法可以做到这一点,或者我是否可以从任何人的错误中吸取教训。
forms - 截屏并在视觉上突出显示焦点控件
在愉快地使用开源软件多年之后,我认为是时候回馈社会了。而且由于文档对于许多项目来说通常是一个弱点,再加上我的 C# 技能在我的 FLOSS 领域并不完全需要,我想我会从教程等开始。
烧写工具的第二个教程后,我已经对例行公事感到恼火
- 截图
- 突出任何重要部分
- 注释它
- 添加到网站
- 重复
并认为我可以自动化。
我想我正在寻找的是一个程序,它将截取当前打开的窗口的屏幕截图,在焦点控件周围绘制一个黄色条(可能是一个按钮),然后弹出一个小文本框让我输入描述图片,最后将其全部添加到网站/数据库/列表/等。
现在我的实际问题是:除非有人知道已经这样做的工具,否则我需要一些初学者来了解如何访问“外部”窗口上控件的大小和位置,以便我可以计算在重要控件周围绘制那些突出显示条的位置。我记得那些用于 Windows 的密码解密工具可以显示任何受保护的******
文本框的内容,但我找不到任何打开的示例。我猜是 WinAPI 的东西,WindowFromPoint + GetDlgItem 或类似的东西。不知道在 Linux 中是否更容易,不过任何一个都可以。对编程语言也没有偏好。
boost - 在 Boost Interprocess managed_shared_memory 中搜索时,线程陷入互斥等待
我们正在使用 boost::interprocess::managed_shared_memory。最近在测试时,我们发现在进程崩溃后,在共享内存中搜索的线程卡在了 manage_shared_memory APIs 中。我最初的观察是,当进程崩溃并重新启动时,作为 segment_manager 成员的 m_header 递归锁处于锁定状态。为了克服或修复这种情况,我们实际上如何检测这种情况。
注意:boost 库版本是 1_35_0
python - python 脚本能否知道同一脚本的另一个实例正在运行……然后与之交谈?
我想防止同一长时间运行的 python 命令行脚本的多个实例同时运行,并且我希望新实例能够在新实例自杀之前将数据发送到原始实例. 我怎样才能以跨平台的方式做到这一点?
具体来说,我想启用以下行为:
- “
foo.py
”是从命令行启动的,它会保持运行很长时间——几天或几周,直到机器重新启动或父进程杀死它。 - 每隔几分钟就会再次启动相同的脚本,但使用不同的命令行参数
- 启动时,脚本应该查看是否有任何其他实例正在运行。
- 如果其他实例正在运行,则实例#2 应将其命令行参数发送到实例#1,然后实例#2 应退出。
- 实例#1,如果它从另一个脚本接收命令行参数,应该启动一个新线程并(使用在上述步骤中发送的命令行参数)开始执行实例#2 将要执行的工作。
所以我在寻找两件事:一个python程序如何知道另一个自己的实例正在运行,然后一个python命令行程序如何与另一个程序通信?
更复杂的是,相同的脚本需要在 Windows 和 Linux 上运行,因此理想情况下,该解决方案将仅使用 Python 标准库,而不使用任何特定于操作系统的调用。尽管如果我需要一个 Windows 代码路径和一个 *nix 代码路径(以及if
在我的代码中选择一个或另一个的大语句),但如果“相同代码”解决方案是不可能的,那也没关系。
我意识到我可能会制定一种基于文件的方法(例如,实例 #1 监视目录的更改,并且每个实例在它想要工作时将文件放入该目录)但我有点担心清理这些文件在非正常机器关闭后。理想情况下,我可以使用内存解决方案。但是我还是很灵活,如果基于持久文件的方法是唯一的方法,我愿意接受这个选项。
更多详细信息:我正在尝试这样做,因为我们的服务器正在使用一个监控工具,该工具支持运行 python 脚本来收集监控数据(例如数据库查询或 Web 服务调用的结果),然后监控工具索引这些数据以供以后使用。其中一些脚本启动起来非常昂贵,但启动后运行起来却很便宜(例如建立数据库连接与运行查询)。所以我们选择让它们在无限循环中运行,直到父进程杀死它们。
这很好用,但在较大的服务器上,可能会运行相同脚本的 100 个实例,即使它们仅每 20 分钟收集一次数据。这对 RAM、数据库连接限制等造成了严重破坏。我们希望从 100 个进程和 1 个线程切换到一个进程和 100 个线程,每个进程执行之前一个脚本正在执行的工作。
但是无法更改监视工具调用脚本的方式。我们需要保持调用相同(启动具有不同命令行参数的进程),但更改脚本以识别另一个处于活动状态,并让“新”脚本发送其工作指令(来自命令行参数)到“旧”脚本。
顺便说一句,这不是我想在一个脚本的基础上做的事情。相反,我想将此行为打包到许多脚本作者可以利用的库中——我的目标是使脚本作者能够编写不知道多实例问题的简单单线程脚本,并处理多线程和单实例。
distributed-computing - 分布式计算和进程间通信的基本区别?
我知道分布式计算和进程间通信的理论定义。
但实时我无法得出结论,当我们选择分布式或跨进程时。
告诉我一些场景,我们可以通过示例进行分布式计算或进程间通信。
boost - Mac OS X:提升进程间信号量 timed_wait:CPU 消耗异常
在将一段代码从 Windows 移植到 Mac OS X 后,我发现它在运行时会消耗整个 CPU 内核;CPU 消耗的负责调用是 boost::interprocess::interprocess_semaphore::timed_wait。
下面是重现此行为的代码部分。
然后,我读到未命名的信号量在 Mac OS X 下不可用,所以我认为这可能是因为未有效地模拟未命名的信号量......然后我尝试了以下操作,但未成功:
由于可用的 Posix 原语,我实际上期待在 Mac OS X 上的 boost::interprocess 有更好的行为,但实际上并非如此。有解决方案的想法吗?非常感谢。
linux - 我可以在主机进程之间共享 cuda GPU 设备内存吗?
是否有可能有两个或多个可以访问同一设备内存的 linux 主机进程?我有两个进程在它们之间传输高数据速率,我不想将数据从 GPU 带回进程 A 中的主机,只是为了将其传递给进程 B,后者将 memcpy h2d 返回到 GPU。
将多个进程组合成一个进程不是一种选择。
kernel - 发送指向不同进程的指针并使用它们?
是否可以通过Mach IPC通过将指针转换为int然后将其转换回对象来发送指向对象的指针。那会起作用吗?怎么做?
我想将 CALayer 对象发送到不同的进程。我认为我不能通过Mach IPC发送原始对象。
cross-platform - 我应该使用 CORBA、MessagePack RPC 或 Thrift,还是完全使用其他东西?
我正在为一种新的硬件设备编写软件,我希望任何一种新的第三方应用程序都能够访问,如果他们愿意的话。
该软件将是一个本机进程 (C++),应该可以被想要支持硬件设备的 3rd 方游戏和应用程序轮询。这些第 3 方应用程序还应该能够在订阅的基础上接收来自本机进程的事件。因此,除了本机进程之外,我还将为第 3 方开发人员提供“连接器”库,用于他们可能选择的所有平台/语言(Java、C++、Python 等)嵌入到他们的应用程序中,以便他们可以轻松连接到设备几乎不需要他们编写任何额外的代码。我想针对所有台式机/笔记本电脑操作系统平台,并且对我想要公开的功能有一个很好的了解,但理想情况下我不想太卡住(即我希望它可以从客户端和服务器优雅地扩展观点)。
我正在寻找未来的可靠性、性能、可维护性和跨平台/语言的灵活性,以及易于开发,按此顺序。
我应该使用什么?
CORBA、MessagePack-RPC、Thrift 还是其他什么?
(由于它的许可,我省略了 ICE)
c - 文件锁定与信号量
只是出于好奇,在 Linux 上实现进程间同步的首选方法是什么?sem*(2)
系统调用家族似乎有一个非常笨拙和过时的界面,而锁定文件的方法有fcntl()
.flock()
和lockf()
.
内部差异是什么(如果有的话),您如何证明使用它们的合理性?