Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fork server doesn't flush stdout/stderr after preloading modules, potentially leaving buffered data to be inherited by child processes #135335

Closed
Labels
stdlibStandard Library Python modules in the Lib/ directorytopic-multiprocessingtype-bugAn unexpected behavior, bug, or error
@duaneg

Description

@duaneg

Bug report

Bug description:

Files

a/__init__.py
importosimporttimeprint(f"init{os.getpid()} at{time.clock_gettime_ns(time.CLOCK_MONOTONIC)}")
repro.py
importmultiprocessingimportosimporttimeif__name__=='__main__':print(f"run main{os.getpid()}")multiprocessing.set_forkserver_preload(['a'])for_inrange(2):p=multiprocessing.Process()p.start()p.join()else:print(f"re-import main{os.getpid()} at{time.clock_gettime_ns(time.CLOCK_MONOTONIC)}")

Reproduction

  1. Create a new modulea containing the__init__.py file above
  2. Run therepro.py script above, ensuring the module created is onPYTHONPATH

Result

> ./python repro.pyrun main 1056488init 1056490 at 151009034069836re-import main 1056491 at 151009045273212re-import main 1056492 at 151009051787587> ./python repro.py | tee /dev/nullrun main 1056607init 1056610 at 151113770440639re-import main 1056611 at 151113781130002init 1056610 at 151113770440639re-import main 1056612 at 151113787814593init 1056610 at 151113770440639

Expected

The output to be the same when stdout is redirected as when it is not.

Analysis

This is due to fork server preloading a module that writes tostdout, but not flushing it. When a child process is spawned it inherits the buffered data and spuriously outputs it when it flushesitsstdout. Note that#126631 prevents__main__ from being preloaded, so at present this will not be triggered by printing from__main__.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    stdlibStandard Library Python modules in the Lib/ directorytopic-multiprocessingtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions


      [8]ページ先頭

      ©2009-2025 Movatter.jp