首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中使用回调处理线程的最快方法

在Python中使用回调处理线程的最快方法
EN

Stack Overflow用户
提问于 2015-05-28 07:43:53
回答 2查看 639关注 0票数 0

我正在通过PyVisa (VISA的Python包装器)使用一些测量仪器。具体来说,我需要从四个仪器中读取测量值,如下所示:

代码语言:javascript
运行
复制
current1 = instrument1.ask("READ?")
current2 = instrument2.ask("READ?")
current3 = instrument3.ask("READ?")
current4 = instrument4.ask("READ?")

对于我的应用程序来说,速度是必须的。单独而言,我可以从这四个仪器获得每秒50到200个测量值,但不幸的是,我当前的代码是按顺序计算这四个仪器的。

根据我所读到的,Python中的线程和多处理有一些选项,但对我来说,最好和最快的选项还不是很明显。最好的情况是每秒产生大约4x50个线程,所以开销有点令人担忧。

这项任务不是CPU密集型的,它只是等待仪器读数的问题。

对于正确的行动方向,有什么建议吗?

首先要感谢大家!

EN

回答 2

Stack Overflow用户

发布于 2015-05-28 08:13:56

尝试使用python中的multiprocessing模块。由于python解释器的编写方式,当在具有多个处理器的计算机上使用多个线程时,python的线程模块实际上会降低应用程序的速度。这是由于全局解释器锁(GIL),它只允许每个进程在同一时间运行一个python线程。这使得像内存管理和并发性这样的事情对解释器来说更容易。

我建议尝试为每个仪器(生产者进程)创建一个进程,并将结果发送到由单个进程(消费者进程)处理的共享队列。

我还会将您创建的进程数量限制为您计算机上的处理器数量。创建太多的进程会带来大量的开销。

如果你真的觉得你需要你在你的帖子中建议的200个线程,我可以用Java或C++编程。

票数 0
EN

Stack Overflow用户

发布于 2015-06-03 23:16:39

我不确定这是否符合你的要求我对pyVisa不是很熟悉,但是你有没有看过pypy的无堆栈的例子它的速度提升相当惊人,而且你能够产生几乎无限数量的‘threadlet’而不会对你的系统/程序造成太大的阻碍。

pypy在支持各种包方面有点有限,但看起来pyVisa不在其中。

https://pypi.python.org/pypi/PyVISA

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30494957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档