小编Bob*_*obC的帖子

如何最好地唤醒沉睡的Python线程?

我的局域网上有一台仪器每隔5-10毫秒发送一个UDP数据包.在我的应用程序中,我有一个读取器线程,它在启动时分配一个带有大缓冲区的套接字,然后进入一个无限循环来读取累积的数据包,解析它们,将它们写入假脱机程序,然后休眠半秒钟(time.sleep(0.500)).

我有几个懒惰的数据消费者,其中大多数都存档或生成被动统计数据.但是一个消费者(用于显示)需要最新数据,并且需要在查询假脱机程序之前唤醒睡眠读取器(读取套接字).

唤醒睡眠线程的最佳方法是什么?

(或者,或者,有一种更好的方式让线程更容易被唤醒吗?)

python events multithreading sleep

11
推荐指数
1
解决办法
8126
查看次数

Python中的网络接口仿真?

我正在使用Python制作数字广播的模拟器.无线电通过RS-232端口和以太网端口的RF一中继,一对无线电管制作无缝管道.因此,模拟器将成对使用,它们之间的管道模拟RF链路,允许用户使用物理接口,虚拟接口或隧道连接到每一端.

对于RF串行端口,我使用PySerial和虚拟串行端口使模拟器尽可能多样化:我可以将模拟器连接到物理串行端口,网络套接字或另一个本地程序.除了用于在每个不同操作系统上创建虚拟串行端口的工具之外,此方法完全是跨平台的.

我想模拟器能够通过共享的网络接口经由虚拟接口网络与本地节目,与远程程序,并与经由将被专用于模拟器本地物理接口的远程程序.但到目前为止,我还没有找到一种直截了当的方法来做到这一点.我一直在关注SLIP/PPP,TAP/DUN,pcap/SOCK_RAW以及其他可能性,我看不出明显或一般的解决方案.

关键的困难似乎是涉及整个以太网接口,低于IP级别,在以太网协议本身的层面:如果它只是几个端口,解决方案将相对简单.或者我错过了一些令人眼花缭乱的事情?

如何使用Python以与RF串行接口解决方案一样多功能的方式创建和使用RF以太网接口?

python simulation networking interface

5
推荐指数
1
解决办法
1646
查看次数

基于变量值的Python日志记录级别?

我需要根据变量的值更改日志记录级别。例如:

if accel >= 10.0:
    log_func = logging.critical # Critical for splat event
elif accel >= 2.0:
    log_func = logging.warning  # Warning for high-G
elif accel >= 1.0:
    log_func = logging.info     # Info for normal
else:
    log_func = logging.debug    # Debug otherwise
log_func("Collision with %0.1fG impact.", accel)
Run Code Online (Sandbox Code Playgroud)

我的代码中都有这些实例。有没有更好的办法?

python logging

5
推荐指数
1
解决办法
1626
查看次数

Tkinter多帧调整大小

我有一台了解多种串行协议的设备.在开发过程中,我创建了简单的Tkinter UI来使用协议.每个协议都有一个新的UI.由于协议有很多命令,我在可滚动画布中实现了整个UI,以便在较小的显示器上使用时可以滚动它.单独的UI工作正常,我现在正在尝试将单独的UI组合到选项卡式UI中.

每个UI的常见元素是串行端口选择器,我将其分离并放入单独的顶部框架中.然后,我实现了一个笔记本,并将每个协议UI放入每个选项卡的框架中.

但我无法正确控制大小调整:我希望根窗口宽度固定在任何协议帧或串行选择器帧的最大宽度,并禁用水平调整大小.我希望串行选择器始终存在,并且在垂直调整窗口大小时不会影响(仅调整笔记本的大小/滚动).

以下是我到目前为止的情况.所有部件都存在,但笔记本没有填满整个窗口宽度,并且在调整窗口大小时笔记本不会调整大小(调整大小只会增加空白区域).

def main():
    ## Main window
    root = Tkinter.Tk()
    root.title("Multi-Protocol UI")

    ## Grid sizing behavior in window
    root.grid_rowconfigure(0, weight=0)
    root.grid_rowconfigure(1, weight=1)
    root.grid_columnconfigure(0, weight=1)
    root.grid_columnconfigure(1, weight=0)

    ## Window content
    upper = ttk.Frame(root)   # Serial port selector
    upper.grid(row=0)
    upper.grid_rowconfigure(0, weight=0)
    upper.grid_columnconfigure(0, weight=1)
    upper.grid_columnconfigure(1, weight=0)
    lower = ttk.Frame(root)   # For protocols
    lower.grid(row=1)
    lower.grid(row=1, sticky='nswe')
    lower.grid_rowconfigure(0, weight=1)
    lower.grid_columnconfigure(0, weight=1)
    lower.grid_columnconfigure(1, weight=0)

    # Setup serial control frame
    serial = SerialFrame(master=upper)  # Serial port selector widget + Open button

    ## Protocol GUIs …
Run Code Online (Sandbox Code Playgroud)

python resize tkinter frame scrollable

4
推荐指数
1
解决办法
5000
查看次数

更改ttk小部件文本颜色

我已经搜遍了所有,但还没有找到一个简单的例子,展示如何更改ttk小部件样式的次要元素并动态应用它(创建小部件后).

我有一些代表一些配置项的ttk检查按钮,以及一个用于更新远程系统的ttk按钮.检查按钮初始化为远程系统的状态.

如果用户修改了任何一个检查按钮,我希望检查按钮文本和更新按钮文本都变为红色,以提醒用户检查按钮状态不再与远程状态匹配,并且应按下更新按钮以发送修改了远程系统的配置.

按下更新按钮时,更新按钮和所有检查按钮的文本颜色将恢复为黑色.

我知道这是可能的(并且可能很容易),但是怎么样?

编辑:修改背景颜色也可以.

python tkinter colors widget ttk

4
推荐指数
1
解决办法
9556
查看次数

快速整数标准偏差?

年龄前我有一个非常快速的仅整数标准偏差函数(在C中),它将返回"合理"准确的值,不使用除法或乘法,只需移位和加法.我已经失去了那些代码,谷歌一直无法帮助我找到类似的东西,而且我的离散数学技能有点太生疏了,无法重新推导出来.

在我的具体情况下,我有一个14位ADC值列表,我希望能够在没有浮点硬件的8位处理器上快速计算出"足够接近"的标准偏差.

这对任何人都响了吗?

c math integer standard-deviation

4
推荐指数
1
解决办法
2391
查看次数

PyInstaller未能包含来自C:\ Python27\Lib的一些模块

我一直在反复制作Tkinter实用程序的PyInstaller可执行文件,今天早上突然出现的可执行文件失败,C:\ Python27\Lib中的模块出现"无法导入"错误,例如"timeit"和"bisect" ".

该脚本可以自行运行.只有可执行文件有问题.

什么可能改变导致这种行为的想法?或者如何强制修复?

[编辑]以下是可执行文件报告的特定错误:

Traceback (most recent call last):
  File "<string>", line 35, in <module>
  File "../..\utils\InterpolatedArray.py", line 12, in <module>
    import bisect
ImportError: No module named bisect
Run Code Online (Sandbox Code Playgroud)

当我注释掉这个模块的使用(绕过bisect的导入)时,它会导致timeit导入失败.运行脚本本身时不会发生这些错误.

[EDIT2] Pyinstaller创建它需要的目录(./build和./dist),并且没有权限问题.pyinstaller构建完成没有错误.

[EDIT3]这是我正在使用的构建命令:

pyinstaller -F MyMainModule.py
Run Code Online (Sandbox Code Playgroud)

python import pyinstaller

4
推荐指数
2
解决办法
1万
查看次数