Author cagney
Recipients cagney, gregory.p.smith, ned.deily, vstinner
Date 2019-04-05.16:05:36
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <>
In-reply-to <>
On Fri, 5 Apr 2019 at 05:02, Gregory P. Smith <> wrote:
> Gregory P. Smith <> added the comment:
> A stdlib alternative to this whole mess would be to avoid acquiring the logging locks before fork() as we currently do and just blindly re-initialize all of them afterwards under the assumption that they "can't" be protecting anything in a newly forked child process.  Handlers that need specific resource synchronization around fork would then be required to deal with their own os.register_at_fork() calls.  (ex: to avoid multiple processes writing to the same file or fd at once)

FYI, below is a simpler, but related, test.
_at_fork_acquire_release_weakset doesn't seem to be locked:

Ignoring exception from logging atfork <Handler (NOTSET)> release
method: cannot release un-acquired lock

Exception ignored in: <function _after_at_fork_weak_calls at 0x7f7307550378>
Traceback (most recent call last):
  File "/home/python/v3.7.3/lib/python3.7/logging/", line
269, in _after_at_fork_weak_calls
  File "/home/python/v3.7.3/lib/python3.7/logging/", line
254, in _at_fork_weak_calls
    for instance in _at_fork_acquire_release_weakset:
  File "/home/python/v3.7.3/lib/python3.7/", line 60, in __iter__
    for itemref in
RuntimeError: Set changed size during iteration

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/home/python/v3.7.3/lib/python3.7/", line 917, in
  File "/home/python/v3.7.3/lib/python3.7/", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "./", line 11, in lockie
    h = logging.Handler()
  File "/home/python/v3.7.3/lib/python3.7/logging/", line
824, in __init__
  File "/home/python/v3.7.3/lib/python3.7/logging/", line
847, in createLock
  File "/home/python/v3.7.3/lib/python3.7/logging/", line
250, in _register_at_fork_acquire_release
  File "/home/python/v3.7.3/lib/python3.7/", line 83, in add
  File "/home/python/v3.7.3/lib/python3.7/", line 56, in
IndexError: pop from empty list


import logging
import os
import sys
import threading

def lockie():
    while True:
        # this adds handle to _at_fork_acquire_release_weakset
        h = logging.Handler()


for n in range(0,100000):
    if n % 100 == 0:
        sys.stdout.write("%d" % n)
    pid = os.fork()
    if pid != 0:
Date User Action Args
2019-04-05 16:05:36cagneysetrecipients: + cagney, gregory.p.smith, vstinner, ned.deily
2019-04-05 16:05:36cagneylinkissue36533 messages
2019-04-05 16:05:36cagneycreate