问题标签 [python-multithreading]
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 - 套接字线程和 PyGTK
我正在尝试编写一个即时消息程序,基本的 ui 几乎完成了,我正在研究消息的接收部分。我有一个 UI 类和一个线程化的 Receive_Socket 类。Received_Socket 类的套接字每次收到消息时,都会执行 gobject.idle_add() 来调用 UI 方法,以便将消息显示到聊天窗口中。在 gobject.idle.add() 行之后,我有一个 while 循环,循环直到消息实际上显示在聊天窗口中(我希望在收到另一条消息之前显示消息,因为我读到了 gobject.idle_add()不保证执行顺序,当然我希望消息按顺序显示:))
我试图总结我的代码:
用户界面类:
线程 Receive_Socket 类:
主要代码:
我的问题:
1) 这种代码看起来高效吗?它(与我的 UI 类一起有一个线程接收类)是最好的方法吗?
2) 到消息显示的时候,socket 可能已经收到了 2 条或更多条消息,所以当它再次执行 message = sock.recv(1024) 时,多条消息将连接在变量 message 中。我想在每条消息中包含消息长度,因此如果 1024 字节中有超过 1 条消息,它将接收消息并将其余消息放入 message_buffer 变量中,然后在再次执行 sock.recv(1024) 之前检查是否message_buffer 变量包含任何内容,如果是,请将 message_buffer 放入 message 变量中,而不是 sock.recv(1024)。有没有更简单/更好的解决方案来做到这一点?
提前致谢,
诺利安
python - Matplotlib:在多个线程中同时绘图
我正在尝试并行进行一些绘图以更快地完成大批量作业。为此,我为我计划制作的每个情节开始一个线程。
我曾希望每个线程都能完成其绘图并自行关闭(据我了解,Python 在线程完成 run() 中的所有语句时会关闭线程)。下面是一些显示此行为的代码。
如果创建图形的行被注释掉,它将按预期运行。另一个似乎很有帮助的花絮是,当您只生成一个线程时,它也会按预期运行。
任何帮助都将受到应有的赞赏。
python - 运行我的python程序几个小时后,能够ping通但无法浏览
这是我用 python 编写的一个 GUI 程序,用于检查在我的 XP SP3 上运行的网站/服务器状态,多线程用于检查不同的站点/服务器。运行几个小时后,程序开始总是出现 urlopen 错误超时,这总是发生在服务器(不是某个服务器,可能是 A 或 B 或 C)的 POST 请求之后,也不是导致问题的第一个 POST 请求,通常在运行几个小时后,它碰巧在一个未知的时刻发出 POST 请求,从那时起你得到的只是 urlopen 错误超时。
一旦程序关闭一切都很好,我仍然可以ping但无法浏览任何站点。这绝对是导致这个问题的程序,我只是不知道如何调试/检查问题是什么,也不知道是操作系统端还是我的程序浪费了太多资源/连接(你还能使用太多连接时ping?),有人可以帮我吗?
python - python线程和套接字
我有一个“我只想理解它”的问题。首先,我在 Ubuntu 上使用 python 2.6.5。
所以..python中的线程(通过线程模块)只是“线程”,只是告诉GIL在某个时间段内从每个“线程”运行代码块等等......实际上并没有真正的线程在这里..
所以问题是 - 如果我在一个线程中有一个阻塞套接字,现在我正在发送数据并将线程阻塞 5 秒。我希望阻塞所有程序,因为它是一个sock.send
阻塞线程的 C 命令 ()。但令我惊讶的是,主线程继续运行。所以问题是 - GIL 在到达像发送这样的阻塞命令后如何能够继续并运行其余代码?不是必须在这里使用真正的线程吗?
谢谢。
python - 是否可以在阻塞并可能回调 Python 的 C 函数之前释放 GIL?
我正在包装一个执行阻塞操作(选择)然后处理传入消息的 C 函数。我的理解是,当 C 函数要阻塞时,在允许其他线程运行的同时调用它的正确方法是:
但是,这个函数碰巧将回调指针作为参数。在处理由 C 函数预处理的传入消息时调用此回调。我已经成功地将这个回调包装在一个调用的函数中PyEval_CallObject()
,允许我向它传递一个 Python 回调。
现在我正在添加线程支持,我想知道是否可以同时:
- 在调用此阻塞操作之前释放 GIL。
- 让这个阻塞操作安全地回调到 python 解释器中。
这会引起问题吗?如果是这样,有没有办法解决它?
谢谢。
python - 使用带有线程的锁的明智的小 Python 示例
我正在寻找一个使用 python 线程和锁的明智的(即它在效率方面应该非常有用)的例子。我知道许多标准的小例子,但它们都缺少至少一个属性“小”、“明智”或“使用锁”——例如:
- 测试 URL 列表以检查可用性(合理、小,但不使用锁)
- 实现几个客户端(每个线程一个)和一个保存变量(或银行帐户或类似的东西)的服务器 - 小,使用锁,但不明智(实际上有更好的方法来实现这一点)。
- 通过线程并行化一个简单的算法(比如一个大列表的总和)——很小,但都不明智(因为你不会通过线程并行化)并且不使用锁。
python - Python多线程扩展——线程锁恢复
我有一个用于 Python 的多线程 C 扩展。它使用 3 个线程将数据输出到 Python 中的类。
我正在使用 PyGILState_Ensure / PyGILState_Release API 来同步解释器调用。
扩展中可能存在一些线程在调用 PyGILState_Release 之前卡住并终止的情况。
无论如何我可以删除无效的 ThreadState 并继续使用线程 API 吗?
谢谢
python - Python 2.1 中线程的示例用法
我需要一些帮助来使用 Python 2.1 实现线程。我很乐意更新到较新版本的 Python,但不幸的是,我正在使用内置于视频游戏中的解释器,所以 2.1 对我来说是一成不变的。为了清楚起见,我需要一个如何在不使用“导入线程”的情况下进行线程化的示例。“导入线程”没问题,但我无法正常工作;通常,当我尝试生成新线程时,它只会锁定游戏。
或者,如果有人可以向我解释我在哪里可以找到这个核心“线程”模块,我可以将它合并到一个解决方案中,因为我读过的关于如何使用该模块的示例看起来非常简单。
TIA
python - 线程与线程
Python中的threading
和模块有什么区别?thread
python - Python多处理:同步类文件对象
我正在尝试制作一个类似对象的文件,该对象旨在在测试期间分配给 sys.stdout/sys.stderr 以提供确定性输出。它并不意味着快速,只是可靠。到目前为止我所拥有的几乎可以工作,但我需要一些帮助来摆脱最后几个极端情况错误。
这是我目前的实现。
...和一个快速测试脚本:
这在 95% 的情况下都能完美运行,但它存在三个极端情况问题。我必须在一个快速的 while 循环中运行测试脚本来重现这些。
- 3% 的时间,父进程的输出没有完全反映。我认为这是因为数据在队列刷新线程赶上之前就被消耗掉了。我还没有办法在没有死锁的情况下等待线程。
- 0.5% 的时间,有来自 multiprocess.Queue 实现的回溯
- 0.01% 的时间,PID 会环绕,因此按 PID 排序会给出错误的顺序。
在最坏的情况下(几率:7000 万分之一),输出将如下所示:
在 python2.7 中,例外情况略有不同:
我如何摆脱这些边缘情况?