【问题标题】:can python do parallel writing a file without using lock or mutex?python可以在不使用锁或互斥锁的情况下并行写入文件吗?
【发布时间】:2012-03-01 03:22:06
【问题描述】:

我有两个传入的流媒体,它们都很大。 我可以刷新第一个数据吗,比如说从文件的位置 1 到 512 另一个从 513 到 1023? 请注意这两个流都来了 并行。

谢谢!

【问题讨论】:

  • 如果并发性如此重要,那你为什么不使用 mmap?
  • 查找全局解释器锁。 Python 并没有真正的并发......
  • @Endophage:只要你点击 C 代码,它就会执行,文件 I/O 是什么。
  • @IgnacioVazquez-Abrams afaik 它在遇到 C 代码时会发生这种情况。文件 I/O 本身将同时运行,但如果数据被读入某个 Python 对象,这将导致 GIL 启动。

标签: python python-3.x


【解决方案1】:

不确定您所说的并行是什么意思,但您可以写入两个打开相同文件的不同文件对象。我认为使用线程或事件循环并不重要。

>>> f1 = open("/tmp/foo", "a")
>>> f2 = open("/tmp/foo", "a")
>>> f1.write("a\n")
>>> f2.write("b\n")
>>> f1.close()
>>> f2.close()
>>> print open("/tmp/foo").read()
a
b

【讨论】:

    【解决方案2】:

    当然,你可以做到。你能保证正确的结果吗?不可以。按照 Ignacio 的建议使用锁或 mmap。

    这里也有很好的讨论:Python multiple threads accessing same file

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-11
      相关资源
      最近更新 更多