问题标签 [asyncore]

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 回答
125 浏览

python - 从 asynchat 启动子类的 INDIVIDUAL 实例

所以我的情况是我已经加载了不止一个类,我已经从中创建了这些子类asynchat,但我只希望其中一个运行。当然,当我打电话给他们时,这并不奏效,asyncore.loop()因为他们都开始了。有什么办法可以让其中只有一个开始运行吗?

编辑:我认为它与map可以传递给的参数有关,asyncore.loop但我无法让它工作。

编辑2:我明白了。基本上我做了以下事情:

0 投票
2 回答
1209 浏览

python - 异步未运行 handle_read

我正在尝试制作一个简单的异步示例,其中一个套接字是发送者,一个是接收者。出于某种原因,接收器上的 handle_read() 从未被调用,因此我从未获得“测试”数据。有谁知道为什么?这是我第一次接触 asyncore,所以它可能非常简单。

0 投票
1 回答
3642 浏览

python - Python、Asyncore 和分叉

对于初学者,我使用了 Twisted 和 SocketServer 以及 ForkMixIn、ThreadMixIn 并尝试了“线程池”recepies。

但是,我想在 Python 中做一些特别的工作。

一点背景。以前我用 C 编写了一个简单的 TCP 守护程序,它会绑定到一个套接字并监听它,然后多次预分叉 X,然后将 serversocket desc 传递给所有分叉,每个人都会非常非常愉快地接受客户端。

我检查了我非常喜欢的基于“select/poll”的异步。我唯一的不满是,我可以通过分叉几次来获得一点 CPU 不受限制,以利用多 CPU 机器,并希望通过调度获得最好的结果。

我不能让它为我的生活工作。只有 1 个实例可以接受连接,所有其他实例只是在处理连接时抛出异常,“不能通过 Empty 进行迭代”。

这甚至可行吗?我检查了很多,但我找不到任何用于分叉异步调度程序的代码(哭)

谢谢!

更新 1:(根据要求进行完整追溯)

总是发生在接受中,无论我是否在 asyncore.loop 之前分叉,等等。

更新 2: (full source) pastebined source

0 投票
2 回答
1904 浏览

python - 使用异步读取套接字缓冲区

我是 Python 新手(尽管我已经用 Java 编程多年了),我正在开发一个简单的基于套接字的网络应用程序(只是为了好玩)。这个想法是我的代码连接到一个远程 TCP 端点,然后侦听从服务器推送到客户端的任何数据,并对此执行一些解析。

从服务器 -> 客户端推送的数据是 UTF-8 编码的文本,每行由CRLF( \x0D\x0A) 分隔。你可能已经猜到了:这个想法是客户端连接到服务器(直到被用户取消),然后读取并解析进入的行。

我已经设法让它发挥作用,但是,我不确定我这样做的方式是否正确。因此,我的实际问题(要遵循的代码):

  1. 这是在 Python 中执行此操作的正确方法吗(即真的这么简单吗)?
  2. 关于缓冲区/的任何提示/技巧/有用资源(除了参考文档)asyncore

目前,正在读取和缓冲数据,如下所示:

ByteUtils.ends_with_crlf函数仅检查缓冲区的最后两个字节是否存在\x0D\x0A. 第一个问题是主要问题(答案基于此),但任何其他想法/提示都值得赞赏。谢谢。

0 投票
2 回答
1273 浏览

python - Asyncore 无法与 Tkinter GUI 一起正常工作

在这一点上,当谈到 GUI 和网络编程时,我仍然是一个菜鸟,所以我希望这将是一个非常简单的修复。我对 tkinter 和 asyncore 模块有一个非常基本的了解,它们在每个模块中都构建了一些程序,但是我在一个程序中同时使用它们时遇到了麻烦。我拼凑了一个完整的 UI,却发现我无法实现任何重要的异步网络功能。为了简单起见,我将程序解构为最简单的形式来说明我遇到的基本问题。继承人的代码:

所以当我运行程序并单击按钮时,我得到字符串'init works',表明clientSocket对象已初始化并且连接成功。但是,handle_connect 方法不运行。如果我实现了 handle_read 方法并在服务器上执行了一个命令(将数据发送回客户端),这个方法也不会被调用。我认为有一些普遍的问题会阻止异步循环自行运行。我意识到 tkinter 事件循环可能是罪魁祸首,但我的印象是 after_idle 方法将允许在 GUI 空闲时处理非 Tkinter 事件。是仍然导致问题的 tkinter 事件循环还是其他原因?

0 投票
1 回答
694 浏览

python - Python asyncore 与普通的旧 C

我正在对 2 个不同的项目进行压力测试:一个是 proxsmtpd - 用 C 编写的 smtp 代理,另一个是 smtp_proxy.py,它是我在 1 小时内开发的,使用 asyncore 和 smtpd python 模块。

我在重负载下强调了这两个项目,并发现 proxsmtpd 能够保持 400 个 smtp 会话/秒,而我的 python 程序只能执行 160 个 smtp 会话/秒。

所以,我的问题是,是因为 asyncore 中存在一些性能限制,还是因为 C 程序更快?或者也许是我,以低效的方式使用异步?

0 投票
1 回答
17403 浏览

python - QObject (QPlainTextEdit) & 多线程问题

我目前正在尝试使用 Python asyncore 和 pyqt4 学习网络。

我编写了一个小型服务器,它基本上监听某个端口,并将它收到的所有消息重新发送给发件人。

由于 qtsQApplication.exec_()asyncore.loop()是永远不会返回的函数,我无法在一个线程中同时启动它们,所以我盯着asyncore.loop()一个单独的守护线程。

每当我的服务器类(派生自asyncore.dispatcher)建立或断开连接,或发送/接收消息时,它都会调用我的窗口类(派生自QtGui.QMainWindow)的方法,将信息显示在QPlainTextEdit.

但是文本是不可见的,除非您用鼠标标记文本。

Python 控制台显示以下错误消息:

我在某个论坛上读到,这可能是由于从另一个线程调用 qt-functions 引起的,并且使用信号和插槽而不是普通函数调用可能会解决此问题,但我也尝试过信号,但我仍然收到此错误。

那么,(如果这真的是我的问题的原因)从另一个线程调用 qt 对象的方法的正确方法是什么?

编辑更多信息: asyncore.loop() 调用位于子线程中,它并没有真正阻塞,但只有在 asyncore.loop() 运行时,我的服务器类 (asyncore.dispatcher) 才能进行联网。因此,在 asyncore.loop() 运行时,我的服务器类的方法由 asyncore.loop() (=子线程)调用,在这些方法中,我尝试向在主线程中运行的窗口类发出信号

编辑:好像我现在可以正常工作了,我的代码中有一些错误,现在一切都按预期工作。

编辑:小例子: http: //paste2.org/p/635612(死链接)

0 投票
3 回答
760 浏览

python - Python异步和dbus

asyncore是否可以通过dbus相同的方式集成main loop

通常,DBus 集成是通过glib主循环完成的:是否可以asyncore集成这个主循环使用 dbus asyncore

0 投票
1 回答
622 浏览

python - 使用 Python Asyncore 构建 SNMP 请求-响应服务

我有一个建立在 asyncore 之上的第 3 方协议模块 (SNMP)。asyncore 接口用于处理响应消息。在异步主循环运行时设计生成协议请求端的客户端的正确技术是什么?我现在可以想到两个选择:

  1. 使用 asyncore.loop() 的循环、超时参数让我的客户端程序有时间发送适当的请求。

  2. 创建一个客户端异步调度器,它将在与接收器相同的异步处理循环中执行。

什么是最好的选择?我正在研究第二个解决方案,因为协议 API 没有让我直接访问异步参数。如果我误解了使用 asyncore 的正确技术,请纠正我。

0 投票
1 回答
599 浏览

python - 使用 python asyncore 从套接字读取固定数量的字节

我使用 asyncore 与使用“长度:消息”类型协议的远程服务器进行通信。有人可以推荐我一种从套接字读取确切字节数的方法吗?我试图使用handle_read来填充内部缓冲区并每次调用我的函数,检查缓冲区的大小,但它看起来太丑了(检查缓冲区是否足够长以读取长度,检查缓冲区长度是否大于消息长度,读取消息等...)。是否有可能有像“socket.read(bytes)”这样的东西,它会一直休眠直到缓冲区被填满并返回值?