Windows 上的 os.fork() 与 Python 的等价物是什么?

发布于 2024-08-30 18:18:58 字数 336 浏览 3 评论 0原文

此代码在 Mac/Linux 中运行良好,但在 Windows 中运行不佳。

import mmap
import os

map = mmap.mmap(-1, 13)
map.write("Hello world!")

pid = os.fork()

if pid == 0: # In a child process
    print 'child'
    map.seek(0)
    print map.readline()

    map.close()
else:
    print 'parent'
  • Windows 上 os.fork() 的等效函数是什么?

This code works well in Mac/Linux, but not in Windows.

import mmap
import os

map = mmap.mmap(-1, 13)
map.write("Hello world!")

pid = os.fork()

if pid == 0: # In a child process
    print 'child'
    map.seek(0)
    print map.readline()

    map.close()
else:
    print 'parent'
  • What's the equivalent function of os.fork() on Windows?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

狂之美人 2024-09-06 18:18:58

这里的答案可能并不能回答问题。该问题是由于 fork() 造成的。从示例来看,您似乎想要在两个 Python 脚本之间共享数据。让我解释一下我的观点。

从 Python 3.8 开始,Windows 平台上没有真正的 Unix 的 fork() 实现。为了使上面的示例正常工作,子进程必须继承所有环境和打开的文件描述符。

我知道Windows现在支持Windows Linux子系统,但我上次检查它仍然没有完全实现fork。 Cygwin 实际上可以,但速度有点慢。

到目前为止,我不知道如何在 Windows 平台中使用 mmap 在两个 Python 脚本之间传递信息。使用

  1. multiprocessing.Queue
  2. multiprocessing.Pipe
  3. multiprocessing.Manager
  4. multiprocessing 的共享内存 (ValueArray)。

我相信你可以让每个Python脚本将要映射的文件的内容读入字符的Array中。然后使用您自己的结构将共享内存映射为结构化数据,就像处理要映射的文件一样。

The answer here may not answer the question. The problem is due to fork(). From the example, you seemed want to share data between two Python scripts. Let me explain my view.

As of Python 3.8, there is no true Unix's fork() implementation in Windows platform. For the example above to work, a child process must inherit all environment and open file descriptors.

I understand that Windows now support Windows Linux Subsystem, but the last i checked it still does not fully implement fork. Cygwin does actually but it is a bit slow.

I do not know how, until now, to pass information between two Python scripts using mmap in Windows platform. Use

  1. multiprocessing.Queue or
  2. multiprocessing.Pipe or
  3. multiprocessing.Manager or
  4. multiprocessing's shared memory (Value and Array) instead.

I believe you could make each Python script to read in content of the to-be-mapped file into Array of characters. Then use your own structure to map the shared memory into a structured data as you do for the to-be-mapped file.

梦屿孤独相伴 2024-09-06 18:18:58

根据您的用例以及是否可以使用 python 2.6,您也许可以使用 multiprocessing 模块。

Depending on your use case and whether you can use python 2.6 or not, you might be able to use the multiprocessing module.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文