python - 保证与 Python 程序同时启动的 C 程序将具有相同的整数时间值

标签 python c time

我目前正在编写涉及将数据从 C 程序传输到 Python 程序的代码。这要求它们都具有完全相同的 time 整数值。我获取时间的方法是:

  • C 语言的时间(0)
  • int(time.time()) 对于 Python

但是,我的输出不一致,导致我相信这不会产生相同的值。 C 程序运行时间 < 0.001 秒,同时:

time ./cprog | python pythonprog.py

给出的时间通常如下所示:

    real    0m0.043s
    user    0m0.052s
    sys     0m0.149s

大约每 5 次运行中有一次会产生预期输出。我可以使其更加一致吗?

最佳答案

不是解决方案 - 而是解释。

启动 python(或其他解释/VM 语言)时,通常会产生与读取和解析所需的许多模块相关的启动成本。即使像“print 5”这样的小型 Python 程序也会执行大量 IO。

启动成本将延迟当前时间的初始查找。

从 strace 输出来看,调用 python 代码将导致 >200 个开放调用、~ (f)stat、>20 个 mmap 调用等。

strace -c python prog.py
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 31.34    0.000293           1       244       178 openat
  9.84    0.000092           1       100           fstat
  9.20    0.000086           1        90        60 stat
  8.98    0.000084           1        68           rt_sigaction
  7.81    0.000073           1        66           close
  2.14    0.000020           2         9           brk
  1.82    0.000017           9         2           munmap
  1.39    0.000013           1        26           mmap
  1.18    0.000011           2         5           lstat
...

关于python - 保证与 Python 程序同时启动的 C 程序将具有相同的整数时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59603946/

相关文章:

python - 如何将 RFC 2822 日期/时间解析为 Python 日期时间?

python argparse文件扩展名检查

python - 如何从本地创建全局变量并存储它的先前值?

c - Yices求解器中的随机解

go - Linux 和 macOS 上 Go 中 RFC3339 时间格式化结果不同

java - 如何通过循环小时来返回时间对象列表

python - 如何在 Python 中对稀疏矩阵中的整列进行加法运算

python - Eclipse/pydev 不会使用项目导入 mysql.connector,但可以从 IDLE 导入

c - 多次对函数进行基准测试 - 第一次之后的所有调用都被指令缓存吗?

c - 在 printf 函数格式标签高于 args 时会发生什么?